根据Cookies失效时间去统计离线在线我觉得不怎么合适。如果客户端的失效时间设置成1个月了,难道你认为他一直在线么?更何况,客户端的变化是不会主动反馈到服务器的,除非再次发出网页内容请求。
是否可以这样,在用户表放一个最后操作的时间,打开或者关闭网页的时候都更新这个字段,统计在线的时候就只要看最后操作时间与现在相差多少来判断是否在线好了。
应该要用Session的失效时间,再加上用户的最后操作时间来判断此用户是否还在线。
纯属个人意见。
http://msdn.microsoft.com/zh-cn/library/7t6b43z4%28VS.80%29.aspx
如果要判断用户在线状态,可以考虑智能客户端,或者异步刷新页面,定期读取。
还有一种方案
用户每一次活动都会在数据库中留下记录(记录活动时间),如果5分钟没有活动,那么就可以判断该用户离线。这里不用Session的支持!
每隔一段时间(比如1分钟)请求一次服务器,更新数据库中的记录用户在线的字段,可以判定用户是否在线。
WebForm的这种在线功能很好做的,我们只要用每一次请求维护一张表就可以了,在表中记录用户最好一次操作的时间,5分或10分没有请求就认为你已离线。再操作就需要重新登录了。在WinForm中,客户站端要定时向服务器报告自己还活着,道理是一样的。