譬如一个论坛,用户登录时,数据库online字段改为在线状态,当下线是则改为离线状态,本来正常注销的话可以调用更改状态的方法,但是当用户直接关闭浏览器时就开始出现问题了,我也可以用js监听浏览器关闭事件,但是碍于总有那么几款rubbish的浏览器不支持,而且这个方法并不周全,譬如 用户突然 断电了 断网了等不可预知的事件,所以放弃js这种方式,没办法就在这里来求思路了,大神们,帮帮小弟呗......分不够可以再+ + +

解决方案 »

  1.   

    用你说的方法+上session超时事件来做?
      

  2.   

    我说个我的思路,共同学习1、用户登录后,把数据库online字段改为在线,并也把online状态,和时间放在内存(memcached或其他方式)
    2、每次用户在论坛上操作的时候,把内存的在线时间改为最后操作时间
    3、写一个服务程序,轮询读取内存中各个用户的状态,当发现时间超过比如30分钟,就同时把数据库改为离线,并清空内存数据使用内存是为了避免频繁更新数据库肯定有不合理的地方,希望大家一起指正、学习
      

  3.   


    session是在服务器端,不用浏览器支持是这样一般服务器端可以配置一个session(会话)的超时时间当session超时的时候,也就是用户很久没有操作的时候,在服务器端可以监听捕获这个事件,然后你可以修改数据库再顶一楼
      

  4.   


    我们想法都差不多,我怎么没想到用HttpSessionListener呢
      

  5.   

    问题又来了 我关闭浏览器 session 监听器里面的sessionDestroyed 并没有执行的呀!
      

  6.   


    关闭浏览器后,session不会马上销毁的,session是有个超时时间的,超时过后才会调用sessionDestroyed就像新浪微博登陆在线后,关了浏览器也要2~5分钟才会显示为下线。如果,你需要关闭浏览器及时显示为下线,可以采用2楼和4楼的方法,但推荐楼主使用HttpSessionListener
      

  7.   

    lz,session要在一段时间内才失效,这个过程用户是不是就不能继续登陆了!?最近写了一个小程序,在数据结构中的状态字段还没有改变回来的时候,是不能登陆的,但是这个session的设置时间,就很纠结了~
    lz有没有什么好的建议!