ASP.NET统计站点在线人数

今天实现了这个功能,同时了解了很多东西。

 1.首先建立global文件,在Application_Start函数中初始化Application对象。

      Application.Add("currentVisitors",0);

2.在Session_Start里写入:

       Application.Lock();
        Application["currentvisitors"] = (int)Application["currentvisitors"] + 1;
        Application.UnLock();

3.在Session_End里写入:

       Application.Lock();
        Application["currentvisitors"] = (int)Application["currentvisitors"] - 1;
        Application.UnLock();

完成以上步骤即可实现统计功能。

但在实际运行过程中结果并非想想那样,虽然能实现统计人数的增加,但关闭网站后 似乎不能 使在线人数 -1,这就意味着,Session_Start里面内容并未执行。

通过查阅资料,了解到 由于HTTP是无状态的,所以即便当客户端关闭浏览器,服务器也不会知道。所有Session对象并没有随着浏览器的关闭而消失,那Session什么时候消失呢?这个取决于Session.Timeout属性,默认好像是10分钟。所以在关闭网站10分钟后才能执行Session_End函数。得到想要的结果。在我等10分钟后再去刷新页面,便得到了想要的结果。

Session的生命周期到底是怎么算的?

      当用户停留在页面,没有对页面进行任何操作,页面没有任何的刷新,这时候TimeOut开始计时。达到时间后Session被Abndon,随即调用Session_End函数。 关闭浏览器也将被当作上面这种情况来处理。所以为什么Session_End函数不能被立即调用。

 

所以以上这个统计在线用户的方法 会存在 一定程度上的 误差!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值