用户重复登录问题

来源:百度知道 编辑:UC知道 时间:2024/05/29 12:29:55
我现在要实现这种功能:
当用户在一台机器上登录以后,就不能在其他机子上再次登录。用户正常退出后,才可以在其他地方登陆。当遇到非法退出的时候也能再次登录!比如遇到突然断电或机器重启的时候也还等在其他地方登陆!
哪位大虾给分析分析,要怎么才能实现!

首先, 你在登陆的时候应该把用户名存入到session中去, 然后用Web自带框架中, 有一个HttpSessionListener接口, 还有HttpSessionAttributeListener接口, 他们两个有一些需要实现的方法

HttpSessionListener两个:sessionCreated, sessionDestroyed
sessionCreated不用管, 扔在那儿就行了.
主要是sessionDestroyed, 他是在你的Session失效或者过期的时候调用的这个方法,

HttpSessionAttributeListener三个:attributeAdded, attributeRemoved, attributeReplaced
attributeAdded是当执行setAttribute的时候, 当这个属性本来不存在于Session中时, 调用这个方法.
attributeRemoved是当执行removeAttribute时调用的方法.
attributeReplaced是当执行setAttribute时 ,如果这个属性已经存在, 覆盖属性的时候, 调用这个方法

这样, 我就可以在这个Listener中声明一个全局的Map, 用来保存当前已经登录的用户, 当用户登录的时候, 会往session中保存用户名, 这样就触发了attributeAdded或attributeReplaced方法, 这时候把相应的用户put入Map中去, key就用session的引用就行, 也就是Session本身, value保存登陆用户的Name, 当用户登出或者Session失效的时候, 触发方法attributeRemoved和是sessionDestroyed, 根据Session , 把相应的用户移出Map, 这样, 就首先做到了保存在线用户的工作.

然后就是登陆判断, 可以在这个SessionListener中写一个静态的方法, 传递进来一个用户名name , 然后遍历Map判断这个用户名是否存在, 存在就返回true ,不存在就返回false, 然后在登陆的servlet或者Action中控制一