老师说 用session 
当监听到 session创建的时候 就将在线用户数加一
当监听到 session销毁的时候 就将在线用户数减一
监听 session创建 容易
但是 监听 session 销毁 我就遇到了问题
session的destroy方法不会在浏览器关闭的时候自动执行 
老师说设置超时 让session自动销毁  
可是这样 就和 我的登录产生了矛盾 不能确保用户登陆后一直处于登陆状态各位 有什么好的方法没 帮我出出主意吧

解决方案 »

  1.   

    写入数据库吧。当session调用destory方法的时候再删除数据库中的值,同时还可以防止用户重复登录
      

  2.   

    把人数存放到application中就好吧,当session调用destory方法时对其修改。
      

  3.   


    不管是把人数存在application中还是存在数据库中  都不能解决我的问题我的意思是  我登陆后 session中保存了我的信息对不对  接下去 只要我不管浏览器  我就要一直能用session中的信息  因为 比如我登陆后  我评论了个文章  这个操作是必须登陆的 现在我登陆了  可以提交评论  只要我不管浏览器 我是不是应该一直可以评论  但是如果我把session设置timeout了  一段时间后就不能在评论了  还得重登  那么我为什么要设置session成timeout自动销毁呢?  我不是要记录当前在线人数吗  可是监听上线好弄
    监听下线不好弄啊  用户一般都是登陆后  用了一会儿  直接关浏览器了  session不会自动调用destroy
    所以我没招了  给位给力啊 帮我想想吧 (."".)
      

  4.   

    可以登录的用户给个状态..session关闭.就改掉状态.登录的话也改变.
      

  5.   

    可是问题就在于 session要怎么关闭呢  除了正常的点注销调用session.invalidate()  
    就只能设置timeout了   还是不行
      

  6.   

    你这个需求,很难圆满实现,建议还是降低所谓“在线”的定义吧。因为浏览器关闭这样的动作,无法绝对可靠的通知给服务器端,即便你用onbeforeunload这样的事件去通知服务器销毁session。变通的做法有几种,但其实都不是很好:
    1、减少session有效时间,比如设置为5min就超时,然后在页面中设置interval,每隔1分钟就去请求下服务器的一个极小页面(在该页面中禁止客户端缓存);
    2、使用长连接,也就是页面中使用一个看不见的IFrame跟服务器端保持长连接。
    总的来说浪费资源且意义不大,没必要纠结于这种在线人数统计的需求。