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

java web同一账号不能同时登陆?
最近的web项目里要求同一账号不能同时登陆!
想了几种方法都有漏洞,谁有可行性方案。不甚感激!

------解决方案--------------------
情况之一:第一个用户等陆了,不允许第二个用户登录。
情况之二:第一个用户登录了,第二个用户登录挤掉第一个。
针对于第一种情况,可以在数据库设置用户状态,也可以在缓存,这个很容易实现,现在讨论浏览器异常关闭
的情况如何处理
可以考虑以下3个方法:
1。session失效,实现比较简单,也很保险,但缺点是实时性太差。
2。ajax轮询,也就是在客户端写个定时器,定时通过ajax方式发送一个信号到服务端,当服务端过了最大时间都没有接收到信号说明客户端已经关闭。
3。客户端用一个脚本监测是否关闭
JScript code

window.onbeforeunload = function onunload_handler(){
 //浏览器关闭的时候会执行到此处
  //处理用户信息,使之变成离线状态
}

------解决方案--------------------
探讨

登陆的时候 session绑定到服务器全局变量中

另外一个地方登陆的时候把前一个挤出来

两个地方登陆的id一样 如果存在id一样 登陆ip不同 则挤出

------解决方案--------------------
先设置session 的有效期为10秒(设置比较短的时间)
在页面上写 用js 访问session的代码(可以使用ajax)(用定时器 定时访问当前登录用户的session,保持 session的可用性)。
当浏览器异常退出,或者被关闭, session将不会再被访问到,这样session超时10秒,就会销毁。 或者用户注销 ,服务器主动销毁session。

当一个用户登录的时候 只要浏览器没有被关闭,session应该是一直都有效的。 只要用户一关闭浏览器。过十秒后,session就会超时销毁。

当一个用户已经登录,这个账户再次登录的时候,只需判断是否在session存在。。如果存在 则是已经登录 不存在则没有登录 。。。