如果是Session的话会出现超时等情况,这样计算就不精确了
使用Global.asax的方法是什么,在网上也有自己写方法的,一般最好是怎么做呢?
有什么最简单却最好的方法呢?

解决方案 »

  1.   

    放在 Application 里  有人登录就+1 退出就-1
      

  2.   

    HTTP协议是种无状态的协议,要精确统计不太可能。可以用Session启动、结束、过期来进行判断或者在数据库中建个表保存在线用户,每次访问时刷新该用户最新访问时间,如果在设定的时间内刷新时间过期则将该用户从表中删除,比较简单的做法是在Global.asax文件中写代码
    public class Global : System.Web.HttpApplication
        {        protected void Application_Start(object sender, EventArgs e)
            {
                Application["Count"] = 0;
            }        protected void Session_Start(object sender, EventArgs e)
            {
                Application["Count"] = (int)Application["Count"] + 1;
            }              
            protected void Session_End(object sender, EventArgs e)
            {
                if ((int)Application["Count"] > 0) Application["Count"] = (int)Application["Count"] - 1;
            }    }
      

  3.   

    同意 5楼
    HTTP协议是种无状态的协议,没法精确统计。
      

  4.   

    现在我的写法是这样的,看有什么需要修改的 
    因为我是统计登录的在线用户,简单说就是有多少人登录了后台我在登录页面Login.aspx,Application["UserNums"] = (int)Application["UserNums"] + 1;
    在Global.asax里面    void Application_Start(object sender, EventArgs e)
        {
            Application["UserNums"] = 0;
        }    void Application_End(object sender, EventArgs e)
        {
            if (Application["UserNums"] != null)
            {
                Application["UserNums"] = (int)Application["UserNums"] - 1;
            }
        }    void Application_Error(object sender, EventArgs e)
        {
        }    void Session_Start(object sender, EventArgs e)
        {
            // 在新会话启动时运行的代码    }    void Session_End(object sender, EventArgs e)
        {
            // 在会话结束时运行的代码。 
            // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
            // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer 
            // 或 SQLServer,则不会引发该事件。    }
    在退出的页面Logout.aspx页面,if (Application["UserNums"] != null)
                {
                    Application["UserNums"] = (int)Application["UserNums"] - 1;
                }大概就这样
      

  5.   

    嗯 不能精确统计和HTTP协议是种无状态的协议有什么关系,请指教
    另外如果用Session的话,经常一会就超时了,怎么解决呢?
      

  6.   

    Session退出时实现人数统计不准确。非法关机或关闭IE不会执行 
    要记录用户日志和操作时间,再用定时器刷新计算用户 
    已经有固定时间没有活动的用户,然后删除 
    http://topic.csdn.net/u/20090529/10/35747769-cb13-46f4-927c-6c6bc46d338a.html
      

  7.   

    通过ajax异步提交(定时),统计在线人数。
      

  8.   

    要达到精确,估计无解,也没什么意思
    一般就是判断SESSION了
      

  9.   

    顶..
    用application 只是实时没你要求的精确.但足够了
      

  10.   


    用JS了刷新客户端,哪些页面自己决定,只要是为了让在线用户 不会随着session到期而消失,导致统计错误当然会哦