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

使用session处理用户登录状态的问题
如果是手动点击退出,我会立刻session.validate销毁。如果是关闭浏览器,那么session就等待超时后自动销毁。我在HttpSessionListener里的sessionDestroy方法里处理session销毁时去更新数据库里的登录状态为不在线。
问题来了,如果我以关闭浏览器的方式退出,超时时间是15分钟,我在12分钟的时候又登录了,那么这样会造成登录后3分钟时,原来的session销毁动作触发,造成明明此时用户在线,但是数据库里的状态却改成离线了。
这种情况有办法解决吗?

------解决方案--------------------
楼主可以给用户登录添加一个字段 登录id

用户每次登录成功都生成一个登录id放在数据库

当session销毁时判断session中的登录id和数据库中的一样不

如果不一样说明后面有新的登录了 就不做下线处理

如果一样,说明从登陆到注销都没有新的登录现象 就可以置为下线