一个账号只能登录一次??

10-12-01 shangwangwuzui1988
现在有这样的一个需求:一个账号只能登录一次,如果登录两次,后者把前者踢掉。但问题就出现了,如果我第二个用户登录后(踢掉第一个用户),并非按照正常流程去注销session的话(浏览器关闭等)session在其有效期内还是有效的,这就意味着我再次登录的话会有一个标识说明我已经登录了这个问题怎么解决?

我是这样做的,但是有以上的问题:

1.我把这个每个用户的账号(不唯一)+编号(唯一)作为我全局变量(ServletContext)的key,value为当前sessionID

当另一个用户登录的时候,同样保存,在过滤器中去ServletContext中的sessionID和当前sessionID比较,不同说明是第一个用户,相同时第二个用户,这样就可以踢掉第一个用户。

2.在用户注销的时候(将session、保存在ServletContext中的变量一同移除)

问题就出现在第二步,并不是所有的用户都会去注销,如果用户不注销的话,我的全局变量中保存的值没有办法移除,同一个账号再次登录的话就会出现”已经登录“的情况(在session没有失效前)。

我用HttpSessionListener,但是sessionDestroyed执行有前提1.调用session.invalidate() 2.session失效

哎,我不能等到session失效吧,即使我能等,当时我不能保证用户会等呀,该怎么办呀,在线急等??

lqtcts
2010-12-01 10:35
2010年12月01日 10:07 "shangwangwuzui1988"的内容
现在有这样的一个需求:一个账号只能登录一次,如果登录两次,后者把前者踢掉。但问题就出现了,如果我第二个用户登录后(踢掉第一个用户),并非按照正常流程去注销session的话(浏览器关闭等)session在其有效期内还是有效的,这就意味着我再 ...

登录前,用interceptor,ContextCleanUp一下,不就OK了么,为什么你要搞得那么复杂?

shangwangwuzui1988
2010-12-01 10:40
2010年12月01日 10:35 "lqtcts"的内容
登录前,用interceptor,ContextCleanUp一下,不就OK了么,为什么你要搞得那么复杂? ...

没用过,能具体说说思路吗?

lqtcts
2010-12-01 11:20
2010年12月01日 10:40 "shangwangwuzui1988"的内容
没用过,能具体说说思路吗? ...

对不起,刚才理解错了,原来你想踢掉前一位用户,关掉浏览器对吧?

这个并不难,用AJAX很容易实现的,因为session里的key是你的账号,重复登陆后原来的session被覆盖掉,原来用户会话过期。现在你要做的是,发送消息给浏览器,告诉它关闭。用AJAX实现,应该很容易的。

shangwangwuzui1988
2010-12-01 11:39
2010年12月01日 11:20 "lqtcts"的内容
现在你要做的是,发送消息给浏览器,告诉它关闭 ...

我从网上也看到了一个事件,是在点击X号的事件,但问题是怎么解决我非正常关闭浏览器,如重启,Alt+F4等等。。

猜你喜欢
3Go 1 2 3 下一页