protected void Application_Start(Object sender, EventArgs e)
{
Application["user_sessions"] = 0; 
}
 
protected void Session_Start(Object sender, EventArgs e)
{
//Session.Timeout=500;
Application.Lock(); 
  Application["user_sessions"] = (int)Application["user_sessions"] + 1; 
  Application.UnLock(); 
}
protected void Session_End(Object sender, EventArgs e)
{
Application.Lock(); 
  Application["user_sessions"] = (int)Application["user_sessions"] - 1; 
  Application.UnLock(); 
}

解决方案 »

  1.   

    Mark===================================
    但愿雨水皆化酒,只恨今生已非人。
      

  2.   

    不执行session_end 事件
      

  3.   

    我用2太机器打开后,关闭其中一个,统计出来的结果还是2个,应该是没有执行session_end 事件
    ,不知道是什么原因??
      

  4.   

    你好,这并不是你程序错误,是因为session有一定的时间存在,默认为20分中,所以在一段时间内你并不能看出结果,你可以看一下webconfig里的 timeout="20" 
    ,这是设置session的过期时间。所以asp.net中的这种统计方式是不准确的,至于好的办法,我暂时也没有想到,我做网站用的也是这样的方法。不过你可以把timeout的属性设置为短一下测试一下,如2分钟或者5分钟,我测试过,2分钟之后在线人数会减少,但是我不知道timeout时间设置少了之后,对整个程序会不会有什么影响,这个还有待测试,但是如果你的程序用的是session保存用户登陆后的标识的话,那这个时间是不能改的(反而应该设置长一些),因为减少之后这样用户登陆后的标识一会儿就过期了,对访问网站就会有问题。