标签:java 不允许 用户同时登录一个账号 java js 解决 关闭窗口事件
需求就是 不允许同一个账户同一时间登录系统。只要有一个账户在线其他人就是不能用这个账户。
功能很简单,过程很纠结 。
这篇文章解决了兼容IE、Firefox 浏览器下,不同IP 地址 同一用户同时登陆的解决办法,包括应对浏览器没有正常关闭的情况。
说下解决过程,本来以为用session存取就好了,后来只能在同一个浏览器内标签窗口好用。跨浏览器就不行。因为sessionId不一样。(经测试 跟sessionID 没关系 )
网上找了一些解决办法。又是些监听器 又是写 方法的; 又是数据库加字段判断状态的。 。。。。都没用 。。。现在反倒觉得 太复杂了 ,完全没必要。
因为真的遇到了断电情况,数据库的字段就没办法修改状态了,直接Pass掉。至于关闭窗口的“X” 而不是选择了“退出”按钮这个功能可以通过JS 控制。轻松解决。
实现方法: 在action 中 添加静态变量 map 数组存储 登录的用户信息 ,先判断是否存在该用户信息的记录情况,有该用户信息就不让 登录了,没有添加到map。就这么简单。
第二个所谓的难点呢 就是如果浏览器选择了“X”按钮 而不是退出按钮。需要在页面添加JS 辅助 进后台 清理session 缓存 和 map 数据信息;触发退出方法清理session信息和Map 内的该用户信息。
(本地浏览器有3种,chrome /ie /firefox ; ie/firefox 已解决关闭窗口的“X” 功能;chrome 还未找到解决办法,chrome 碰到的问题就是 用户登录进来之后 首先执行了下面的js 进后台清空session 信息 然后居然又登录进来了。ie一开始也这样。后来加了ie浏览器判断就解决了。如果高人看到了这篇文章,欢迎指点一二)。
$(window).bind(‘beforeunload‘,function(){
var isIE = /msid/i.test(navigator.userAgent) && !window.opera;
if(isIE){
var n = window.event.screenX - window.screenLeft;
var b = n > document.documentElement.scrollWidth -20;
if(window.event.clientX >360 && window.event.clientY < 0 || window.event.altKey){
//关闭事件
$.ajax({
url :"exitLogin.action", //后台action,清理掉session 数据
type:"post",
success:function(){
alert("您已退出登录");
}
});
}else{
//是刷新事件
}
}else{ //firefox
$.ajax({
url :"exitLogin.action", //后台action,清理掉session 数据
type:"post",
success:function(){
alert("您已退出登录");
}
}
});
最后因为session 超时的话 map 没有进行清理。用户登录的时候先要去map 中批对 信息,这样就没办法登录了。 所以再在 页面上加个定时器 。定时清理一下map 中的数据就可以了。
java 不允许同一账户不同IP 同时登录系统解决办法 兼容IE Firefox,布布扣,bubuko.com
java 不允许同一账户不同IP 同时登录系统解决办法 兼容IE Firefox
标签:java 不允许 用户同时登录一个账号 java js 解决 关闭窗口事件
原文地址:http://blog.csdn.net/hejiakuo/article/details/30252027