我家网站不进入session_end方法,现在客户需要做一个在线统计人数的功能,而且想要精确一点的,有大神能提供一下思路么?

解决方案 »

  1.   

    refer here:
    http://www.cnblogs.com/insus/archive/2013/05/30/3107681.html
      

  2.   

    应用实例:
    http://www.cnblogs.com/insus/p/3291322.html
    最后一个截图。
    文章最后一个链接http://www.jtxedu.cn/
      

  3.   

    什么session_start session_end都是假的  LZ别被骗了..难道我不关浏览器 强制关机 也能触发服务器的session_end吗?别逗了...所以那东西只是初略的统计下,并且实时性不强要想准确,客户端一定要有一个<长连接>.否则别谈什么"精确"
      

  4.   


    是啊,考虑到用户直接关闭浏览器或者直接拔电源的情况。的确不能做到精确,如果通过socket来做链接判断,用户打开第二个页面的时候又会多一个链接。所以现在很苦恼
      

  5.   

    :.net网站统计在线人数问题
    //记录在线人数
     <asp:Label ID="lblCount" runat="server"></asp:Label>
    //显示在线人数
     protected void Page_Load(object sender, EventArgs e)
        {
            lblCount.Text="您是第" + Application["count"].ToString() + "位访客";
        }
    //触发Session_Start事件调用Global.aspx全局类初始化时间记录来访人数
    <%@ Application Language="C#" %><script runat="server">    void Application_Start(object sender, EventArgs e) 
        {
            // 在应用程序启动时运行的代码
            Application["count"] = 0;
        }
        
        void Application_End(object sender, EventArgs e) 
        {
            //在应用程序关闭时运行的代码    }
            
        void Application_Error(object sender, EventArgs e) 
        { 
            //在出现未处理的错误时运行的代码    }    void Session_Start(object sender, EventArgs e) 
        {
            //在新会话启动时运行的代码
            Application.Lock();
            Application["count"] = (int)Application["count"] + 1;
            Application.UnLock();    }    void Session_End(object sender, EventArgs e) 
        {
            //在会话结束时运行的代码。 
            // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
            // InProc 时,才会引发 Session_End 事件。如果会话模式 
            //设置为 StateServer 或 SQLServer,则不会引发该事件。
            Application.Lock();
            Application["count"] = (int)Application["count"] - 1;
            Application.UnLock();
        }
           
    </script>
      

  6.   

    .net网站统计在线人数为什么要用Application?用Redis or Memcached啊!使用Application统计在线人数是坑爹中的战斗机。
    1、Application是非常耗资源的,尤其是访问人数一多的情况下,会爆卡。
    2、Application在服务器一重启or断电的情况下,是会丢失的
    为什么用Redis?
    1、高性能,每秒钟可以读取8100次,写11000次
    2、高可用,在宕机or服务器重启的情况下,不会影响到统计结果
    3、支持分布式,可以部署在单独的服务器上面。
      

  7.   

    还少写了个0,Redis是每秒钟可以读取81000次,写110000次
      

  8.   


    虽然application是比较常用的方式,但也是非常耗资源的;建议换种方式,几种方式比较一下,再决定用哪种方式;