【讨论贴】重复登陆问题
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还没有过期.
------解决方案--------------------