日期:2014-05-19  浏览次数:20861 次

web项目 如何判断当前在线的用户数
老师说 用session 
当监听到 session创建的时候 就将在线用户数加一
当监听到 session销毁的时候 就将在线用户数减一
监听 session创建 容易
但是 监听 session 销毁 我就遇到了问题
session的destroy方法不会在浏览器关闭的时候自动执行 
老师说设置超时 让session自动销毁  
可是这样 就和 我的登录产生了矛盾 不能确保用户登陆后一直处于登陆状态

各位 有什么好的方法没 帮我出出主意吧

------解决方案--------------------
写入数据库吧。当session调用destory方法的时候再删除数据库中的值,同时还可以防止用户重复登录
------解决方案--------------------
可以登录的用户给个状态..session关闭.就改掉状态.登录的话也改变.
------解决方案--------------------
你这个需求,很难圆满实现,建议还是降低所谓“在线”的定义吧。

因为浏览器关闭这样的动作,无法绝对可靠的通知给服务器端,即便你用onbeforeunload这样的事件去通知服务器销毁session。

变通的做法有几种,但其实都不是很好:
1、减少session有效时间,比如设置为5min就超时,然后在页面中设置interval,每隔1分钟就去请求下服务器的一个极小页面(在该页面中禁止客户端缓存);
2、使用长连接,也就是页面中使用一个看不见的IFrame跟服务器端保持长连接。


总的来说浪费资源且意义不大,没必要纠结于这种在线人数统计的需求。