日期:2014-05-18  浏览次数:20619 次

【讨论贴】重复登陆问题
web上的多用户使用同一帐号同时登陆问题如何解决?

我的方法:
<1>   数据库添加表OnlineUser(UserID,UserName,SessionID),session的timeout设为4分钟
<2>   登陆页表单提交到loginchecksrv这个Servlet中
        先判断用户名、密码、验证码是否正确,然后查看OnlineUser表中是否有该用户,如果有就是重

复登陆,没有就OnlineUser表中添加该用户的UserID、UserName、SessionID信息,页面跳转到欢迎

页。
<3>   页面添加javascript脚本,当用户关闭浏览器时执行删除OnlineUser表中该用户以及销

毁sessionde操作。(我没有使用body的unload事件和window的onbeforeunload事件,因为这两个事

件在页面刷新时也会被执行,我的javascript脚本见附件)。
<4>   建立sessionListener当session的主动销毁(点页面退出按钮或使用×关闭浏览器)或session

到时(客户端死机重启等非法退出)的时候执行 <3>

我的问题:
<1>   如果用户打开主页,然后使用主页超连接打开另一页(此时有两页)时,如何处理使用×关闭浏

览器
<2>   在主页使用ctrl+N,然后在新建的主页点击退出按钮或使用×关闭浏览器后,原主页的用户仍然

在线问题。(如果我叙述的不清楚,请大家使用http://community.csdn.net登陆后作我说的操作来

理解一下)。

附件:
javascript
<!--
var   s= "close ";
window.attachEvent( 'onunload ',function(){
    if(s== "fresh "){
        if(window.screenLeft> 10000){
            window.open( "/test/quitsrv ",   "系统退出 ", "toolbar=1,location=1,directories=1,status=1, "+
          "menubar=1,scrollbars=1,resizable=1, "+
          "top= "+(window.screen.availHeight-document.body.clientHeight)/2+
          ",left= "+(window.screen.availWidth-document.body.clientWidth)/2+
          ",width= "+document.body.clientWidth+
            ",height= "+document.body.clientHeight);
        }
    }
    else{
      window.open( "/test/quitsrv ",   "系统退出 ", "toolbar=1,location=1,directories=1,status=1, "+
          "menubar=1,scrollbars=1,resizable=1, "+
          "top= "+(window.screen.availHeight-document.body.clientHeight)/2+
          ",left= "+(window.screen.availWidth-document.body.clientWidth)/2+
          ",width= "+document.body.clientWidth+
            ",height= "+document.body.clientHeight);
  }
});
window.attachEvent( 'onbeforeunload ',function(){   s= "fresh ";});
-->


希望能给没法解决这个问题的人提供一些思路,更希望能完美解决重复登陆问题的高手给出完美的解决方案。


------解决方案--------------------
帮顶,不清楚
------解决方案--------------------
http://download.csdn.net/user/AreamArgentateOfWing

这里有你要的资源
------解决方案--------------------
mark,
------解决方案--------------------
建立listener,监听session的销毁,类似于统计在线人数的方式。你可以在listener里建立一个HashMap的对象保存已登陆用户详细信息。如果在HashMap里包含该用户,则表示已登陆,直接跳转。否则建立OnlineUser对象并以UserID为key放入你的监听listener的HashMap中。sessionDestroyed方法里remove掉UserID的OnlineUser对象。

这样就可以了。
------解决方案--------------------
菜鸟 学习中
------解决方案--------------------
好象是没有一个好办法解决 "真正的 " 在线(online)。
关掉IE就是一个,此时Session还没有过期.
------解决方案--------------------