void Session_Start(object sender, EventArgs e) 
    {
        
        // 在新会话启动时运行的代码
        
        Session.Timeout = 1;
        //timer
        System.Timers.Timer aTimer = new System.Timers.Timer(3600000);  //設置時間 單位:毫秒
        aTimer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent);          //調用OnTimedEvent方法        aTimer.AutoReset = true;         //循環計數 AutoReset方法 =True
        aTimer.Enabled = true;
  
    }
    private static void OnTimedEvent(object source, System.Timers.ElapsedEventArgs e)
    {
        string userid = Session["userid"].ToString();
        string sql = "delete * from SessionDemoDB where S_UserId = '" + userid + "' ";
        DataAccess.DeleteSession.DelSession(sql);
        //Response.Redirect("Login.aspx");
    }

解决方案 »

  1.   

    这个定义有问题的,因为访问Session["userid"],必须是当前的线程,在静态函数中无法使用
    你想一下,在3600秒后,当前访问的Session是什么呢?如果当前没有请求,也就不会有Session产生private static void OnTimedEvent(object source, System.Timers.ElapsedEventArgs e)
        {
            string userid = Session["userid"].ToString();
            string sql = "delete * from SessionDemoDB where S_UserId = '" + userid + "' ";
            DataAccess.DeleteSession.DelSession(sql);
            //Response.Redirect("Login.aspx");
        }
      

  2.   

    你可以试一下HttpRequest.CurrentSession