日期:2014-05-17  浏览次数:20685 次

关于监听的一个小问题!你懂不?进来看看。。。
对于用户登录,我想做像做到不能重复登录,网上说放在session中,那两台机器呢?还有的说放在application中,那访问的人数达到一定的数量呢?岂不悲剧了!嗯,我想在数据库里弄一个字段,online,0代表下线,1代表上线,但如果用户没有按照流程正常退出,而是直接关掉浏览器或是断电、死机等意外发生,怎么实现一个监听对其数据库中的数据进行更改。
  望各位大神各点实际的提示!由衷感谢!

------解决方案--------------------
对于用户登录,我想做像做到不能重复登录,网上说放在session中,那两台机器呢?
用session好,对于单纯的用户登录,不可能用到application.对于你所说的两台机器,每个用户的session都不同,所以不用担心,如果相同,可以向qq那样的实现操作一样了
------解决方案--------------------
如果一定要获得登录退出状态,就需要除了登录退出来确认在线下线外,还得有一个 在线确认+超时认定下线 机制

如果没有在线确认(比如心跳消息等),就无法确认是否没有主动退出,结合了超时认定下线就可以完善退出机制。

具体的可以查一下:
2、session何时被删除 
综合前面的讨论,session在下列情况下被删除a.程序调用HttpSession.invalidate();或b.距离上一次收到客户端发送的session id时间间隔超过了session的超时设置;或c.服务器进程被停止(非持久session)

http://beyond99.blog.51cto.com/1469451/543282
------解决方案--------------------
写一个方法,在用户登陆之后,每1分钟执行一次(定时执行)。 
方法的内容就是传递用户标识。。
如果超过5分钟未接收到用户标识,标记改为下线
------解决方案--------------------
探讨

引用:

session覆盖就可以了,map存个用户名和session ID sessionID 是唯一的,那样覆盖别人session别人就自动被T了,不要什么监听的。你设置online的话如果IE非正常关闭的话数据永远不会变0或1的话用户怎么上线了?
非正常关闭session会失效的,可以以此来更新数据!