java 不同意同一账户不同IP 同一时候登录系统解决的方法 兼容IE Firefox
需求就是 不同意同一个账户同一时间登录系统。仅仅要有一个账户在线其它人就是不能用这个账户。
功能非常easy,过程非常纠结 。
这篇文章攻克了兼容IE、Firefox 浏览器下,不同IP 地址 同一用户同一时候登陆的解决的方法,包含应对浏览器没有正常关闭的情况。
说下解决过程,本来以为用session存取就好了,后来仅仅能在同一个浏览器内标签窗体好用。跨浏览器就不行。由于sessionId不一样。(经測试 跟sessionID 没关系 )
网上找了一些解决的方法。又是些监听器 又是写 方法的; 又是数据库加字段推断状态的。 。。。。都没用 。。。如今反倒认为 太复杂了 ,全然不是必需。
由于真的遇到了断电情况,数据库的字段就没办法改动状态了,直接Pass掉。至于关闭窗体的“X” 而不是选择了“退出”button这个功能能够通过JS 控制。轻松解决。
实现方法: 在action 中 加入静态变量 map 数组存储 登录的用户信息 ,先推断是否存在该用户信息的记录情况,有该用户信息就不让 登录了,没有加入到map。就这么简单。
第二个所谓的难点呢 就是假设浏览器选择了“X”button 而不是退出button。须要在页面加入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线程池参数?「建议收藏」
- Contest1620 – 2020-2021-2学期《Java Web 系统开发》:java基础:字符串
- java中的compareto方法的详细介绍
- java游戏开发入门教程_JAVA制作游戏入门教程
- MySQL字段类型如何转为java_Java JDBC中,MySQL字段类型到JAVA类型的转换
- java九九乘法表代码加解释_java九九乘法表编程代码是什么?
- Java 8 的 java.util.function.* POJO 的反射新方法
- Java截取字符串方法_java通过split截取字符串
- java查找字符的方法_Java字符串查找(3种方法)
- 【Groovy】Groovy 方法调用 ( Java 中函数参数是接口类型 | 函数参数是接口类型 可以 直接传递闭包 )
- 如何正确实现Java中的hashCode方法详解编程语言
- 在Linux中查看Java线程:一种方法(linux查看java线程)
- Java异步MySQL:开启数据处理新时代(java异步mysql)
- Java 与 Linux 的结合:开启新时代(java和linux)
- JSP Request.getUserPrincipal()方法:返回java.security.Principal对象
- 写入数据Java实现MySQL数据写入(java向mysql)
- MySQL与Java互调:构建高效业务系统(mysql调用java)
- 时间解决Redis中Java设置过期时间的方法(redisjava过期)
- 构建Java应用程序中Redis集群的方法(java连redis集群)
- Linux系统如何配置Java?(linux下配置java)
- 使用Java连接MySQL数据库的具体操作方法(java连接mysql代码)
- java中计算字符串长度的方法及u4E00与u9FBB的认识