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 不同意同一账户不同IP 同一时候登录系统解决的方法 兼容IE Firefox的更多相关文章
- java正则表达式提取地址中的ip和端口号
由于我需要用到java正则表达式提取地址中的ip和端口号,所以我就写了一个demo,测试一下,下面是demo public class Test0810_1 { public static void ...
- java代码获取客户端的真实ip
java代码获取客户端的真实ip protected String getIpAddr(HttpServletRequest request) { String ip = request.getHea ...
- java获取本机名称、IP、MAC地址和网卡名称
java获取本机名称.IP.MAC地址和网卡名称 摘自:https://blog.csdn.net/Dai_Haijiao/article/details/80364370 2018年05月18日 1 ...
- 用Java来获取访问者真实的IP地址
用Java来获取访问者真实的IP地址 转载 2016年06月07日 14:36:02 标签: 16497 编辑 删除 在JSP里,获取客户端的IP地址的方法是:request.getRemoteAdd ...
- java单点登录系统CAS的简单使用
转:http://blog.csdn.net/yunye114105/article/details/7997041 背景 有几个相对独立的java的web应用系统, 各自有自己的登陆验证功能,用户在 ...
- java J2EE与DiscuzX3.2的UCenter实现单点登录
最近笔者在实现Java项目对discuz的整合.在此过程中,查了很多这方面的资料,发现网上并没有说得比较全面的文章.笔者博取众长以及自己在此过程中遇到的问题,写下来供大家参考,希望大家可以在这过程中少 ...
- Linux 禁止用户或 IP通过 SSH 登录
一切都是为了安全,做到来着可知! 限制用户 SSH 登录 1.只允许指定用户进行登录(白名单): 在 /etc/ssh/sshd_config 配置文件中设置 AllowUsers ...
- 重学 Java 设计模式:实战装饰器模式(SSO单点登录功能扩展,增加拦截用户访问方法范围场景)
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 对于代码你有编程感觉吗 很多人写代码往往是没有编程感觉的,也就是除了可以把功能按照固 ...
- 【Java进阶面试系列之一】哥们,你们的系统架构中为什么要引入消息中间件?
转: [Java进阶面试系列之一]哥们,你们的系统架构中为什么要引入消息中间件? **这篇文章开始,我们把消息中间件这块高频的面试题给大家说一下,也会涵盖一些MQ中间件常见的技术问题. 这里大家可以关 ...
随机推荐
- PHP与memcache和memcached以及安装使用
老规则,在作者寒冰讲之前我们要来明确memcache与memcached这两个东西到底是什么? 说法一: 两个不同版本的php的memcached的客户端 new memcache是pecl扩展库版本 ...
- 武汉科技大学ACM :1008: A+B for Input-Output Practice (VIII)
Problem Description Your task is to calculate the sum of some integers. Input Input contains an inte ...
- 【C#编程基础学习笔记】4---Convert类型转换
2013/7/24 技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]4---Convert类型转换 ...
- startActivityForResult
Activity提供了startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,新的Activity关闭后会向前面的Ac ...
- 清除oracl中有主外键关联的表中的部分数据。
1.禁用主外键BEGINfor c in (select 'ALTER TABLE '||TABLE_NAME||' DISABLE CONSTRAINT '||constraint_name||' ...
- SpringMVC——从HelloWorld
学习SpringMVC——从HelloWorld开始 前言: 时隔十二年,中国女排最终过关斩将,用3:1的成绩证明了自己的实力,霸气夺冠,为中国赢得了一枚意义非常的金牌.这是一次全民的狂欢,一场视 ...
- 51单片机C语言学习笔记6:51单片机C语言头文件及其使用
很多初学单片机者往往对C51的头文件感到很神秘,而为什么要那样写,甚至有的初学者喜欢问,P1口的P为什么要大写,不大写行不行呢?其实这个是在头文件中用sfr定义的,现在定义好了的是这样的 sfr P1 ...
- mysql System Tablespace
System Tablespace 数据文件配置: mysql> show variables like '%innodb_data_file_path%'; +---------------- ...
- C语言的一个关键字——static
Static在C语言里面有两个作用,第一个是修饰变量,第二个是修饰函数. 1.Static修饰变量 按照作用范围的不同,变量分为局部变量和全局变量.如果用static修饰变量,不论这个变量是全局的 ...
- poj3177 Redundant Paths
Description In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numb ...