一个账号只能登录一次??
现在有这样的一个需求:一个账号只能登录一次,如果登录两次,后者把前者踢掉。但问题就出现了,如果我第二个用户登录后(踢掉第一个用户),并非按照正常流程去注销session的话(浏览器关闭等)session在其有效期内还是有效的,这就意味着我再次登录的话会有一个标识说明我已经登录了这个问题怎么解决?
我是这样做的,但是有以上的问题:
1.我把这个每个用户的账号(不唯一)+编号(唯一)作为我全局变量(ServletContext)的key,value为当前sessionID
当另一个用户登录的时候,同样保存,在过滤器中去ServletContext中的sessionID和当前sessionID比较,不同说明是第一个用户,相同时第二个用户,这样就可以踢掉第一个用户。
2.在用户注销的时候(将session、保存在ServletContext中的变量一同移除)
问题就出现在第二步,并不是所有的用户都会去注销,如果用户不注销的话,我的全局变量中保存的值没有办法移除,同一个账号再次登录的话就会出现”已经登录“的情况(在session没有失效前)。
我用HttpSessionListener,但是sessionDestroyed执行有前提1.调用session.invalidate() 2.session失效
哎,我不能等到session失效吧,即使我能等,当时我不能保证用户会等呀,该怎么办呀,在线急等??