重复登录问题解决思路

一、先把用户名存到session中,让后让application从session获取,用HttpSessionListener的destory()方法,当session销毁时,从application中移除该session的用户名!
二、Onbeforeunload也是在页面刷新或关闭时调用,Onbeforeunload是正要去服务器读取新的页面时调用,此时还没开始读取;而onunload则已经从服务器上读到了需要加载的新的页面,在即将替换掉当前页面时调用。Onunload是无法阻止页面的更新和关闭的。而 Onbeforeunload 可以做到。曾经做一个考试系统,涉及到防止用户半途退出考试(有意或者无意),代码如下:
 Java代码  收藏代码
 
    <script type="text/javascript"> 
     <!--   
         window.onbeforeunload = onbeforeunload_handler; 
         window.onunload = onunload_handler; 
         function onbeforeunload_handler(){ 
             var warning="确认退出?";         
             return warning; 
         } 
          
         function onunload_handler(){ 
             var warning="谢谢光临"; 
             alert(warning); 
         } 
     // --> 
     </script>  
三、有没有更好的办法啊,比如当用户登录的时候为用户创建一个标志性的对象,当用户退出的时候销毁这个对象,具体怎样实现。
 有没有什么办法监听到用户退出系统时的动作。
四、即便是你写再多代码控制,就如你说,用户断电,客户端如何能够触发你的事件,我认为,这样只能在服务器端做文章,简单点做就是设置session 超时,麻烦点的话,应该服务器端监听客户端的响应事件,定时给客户端发送请求。
五、用AJXA,定时给后台发送段信息,当后台超过多少时间接受不到信息时,将session注销
B/S程序只能是客户端发送请求给服务端,服务端接受处理请求,只要你任意一个页面开着,这个Ajax就每隔1秒发送一个我还在浏览的信息到服务器,你关闭了窗口就不会发送了,这样即使你强行关闭浏览器,断电了,电脑被炸了,地震了。。。。服务器过了超过1秒时间没有收到你的确认消息就自动注销你的session就是了。
可以把登陆消息确认时间记在session中,写一个守护线程,每1秒检查一下session列表中,发现某一个超过时间没有确认就把他做了
六、思路是这样的:
 
用户登陆--->触发SESSIONLISTENER对象---->在SESSIONLISTENER对象先判断此SESSION的ID是否存在
 
判断分支:存在时,跳过不保存此SESSION对象,不存在时,保存此SESSION对象。
 
SESSIONLISTRNER运行结束---->过滤器运行并寻找SESSION是否是新创建的
 
判断分支:不是新的,进入APPLICATION域中根据SESSION的ID从APPLICATION域中的MAP中找到对应的SESSION,并判断是否存在用户信息
 
判断分支:如果用户存在,则跳过,如果用户为空,则跳转到登陆页面,或是对相应页面的功能不能使用。
 
如果过滤器寻找的SESSION是新创建的,那证明用户又新打开了一个窗口,那么就根据原始的SESSION的ID从MAP中获取相应的用户信息,并把用户信息保存到现在的SESSION中,供现在的新窗口使用。
 
过滤器执行完毕---->执行框架或是JS,JSP页面-->完.
 
这样做能保证用户信息都是统一的,并且在用户关闭某一窗口,或者是停电等原因时,SESSIONLISTENER都能在第一时间销毁SESSION,如果用户重复登陆,我们只要判断SESSION中是否存在已有的ID,那么就能对重复登陆的用户进行阻挡或拒绝。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值