同一用户不同终端登录限制(附:同一浏览器不同用户登录解决方案)
这本来是一个可有可无的问题,不过不保证客户是否会有这方面的需求。废话不多说,先来看同一用户不同终端限制登录的解决方法。
方法很简单,大致思路就是做出userId与sessionId(一个终端对应一个session域,session Id唯一)的键值对,存于全局域application域。用于登录时判断用户是否在别的终端在线。详细代码看图:
是不是觉得很简单,的确,实现非常容易,不过事情还没有结束。有存入就要有移除,不然关闭后就不能再登录了。当然,仅仅只做正常退出是的移除是不够的,现实中并不能保证所有用户都会乖乖的走你定下的退出流程。大多用户都是直接关闭浏览器了事,因此,这个事后处理还要由我们来做。
做法同样非常简单,我们来设置一下session域的监听。当有session域销毁的时候,做出移除application中相应键值对的操作,实现代码如下:
在web.xml下设置监听,顺便设置session的time_out时间。
以下是监听的实现代码:
当然,用户点击logout正常退出时记得移除application中相应的键值对,代码这里就不贴了。
接下来,再来看看同一浏览器多用户登录的问题。这个问题很有意思,同一个浏览器意味着相同的session对象。做web的你相信对session意味着什么肯定是不陌生的。session里面存着当前用户的独有信息,不同的用户登录意味着上一个用户的信息将会被刷掉。因此大多网站的做法都是要么不处理,要么禁止不同用户在同一终端登录,要么当第二个用户登录后,第一个用户再登录被要求重新登录。
对于这个问题恰好昨天看到了学校的教务系统,没想到它居然实现了这一功能。观察它的url请求才发现它们屁股后面都跟着一个一段小尾巴***.net?userId=###。没错,教务系统的服务器就是根据每个url请求的userId来区分用户的。至于session存储信息的方法,下面是我的设想,当然已经在我的项目上实现。由于代码量大无法贴出下面给出我的解决思路(以我此次项目为例):
1、用户登录成功,用户信息(我这里只存了用户名)存入session域中键值对字符串“userID”映射的用户List。
2、用户权限信息存入session域中键值对字符串“power”映射的权限Map,其中Map的key为用户名,value为权限信息。
3、作拦截器拦截userId为空的请求,转到登录页面。
如此,便可根据url传来的userId信息获得正确的用户信息实现同一浏览器多用户登录了。当然,这种方法没有特别要求的话博主是不推荐的。如果你有更好的办法,望不吝啬赐教。
最后,做一下“限制同一用户不能在不同终端上同时登录”功能与“不同浏览器登录同一用户”功能的冲突性分析:
同一浏览器登录不同用户:登录时不验证 只使用session不使用application
不同浏览器登录同一用户:登录时验证sessionId-userId application使用userSessionMap
无功能交叉,功能实现互不影响。放心大胆的用吧。
同一用户不同终端登录限制(附:同一浏览器不同用户登录解决方案)相关推荐
- C# 网络编程之网页自动登录 (一).使用WebBrower控件模仿登录
C# 网络编程之网页自动登录 (一).使用WebBrower控件模仿登录 最近学习C#网络编程中,想实现网页自动登录并提交GET/POST信息,再实现循环登录不断发送报文给服务器,服务器发送消息给客户 ...
- 通达OA v11.7 在线用户登录漏洞附自写poc
文章目录 二.漏洞影响 三.漏洞复现 四.漏洞利用POC 五.总结 本文就介绍了通达OA v11.7 在线用户登录漏洞利用方法,及自己写的poc. # 一.漏洞描述 通达OA v11.7 中webro ...
- linux 当前活动用户,如何在Linux上自动记录所有用户的终端会话活动
如何在Linux上自动记录所有用户的终端会话活动 不久前,我们写了一篇文章,使用script命令记录Linux终端会话活动. 今天,我们还将讨论相同的主题. 但是,本教程允许您自动记录所有用户的终端会 ...
- php jquery ajax登录,jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
弹出层主要用于展示丰富的页面信息,还有一个更好的应用是弹出表单层丰富交互应用.常见的应用有弹出登录表单层,用户提交登录信息,后台验证登录成功后,弹出层消失,主页面局部刷新用户信息.本文我们将给大家介绍 ...
- ubuntu服务器ssh登录密码修改,Ubuntu-18.04 下修改root用户密码,安装SSH服务,允许root用户远程登录,安装vsftp服务器...
修改root用户密码 打开终端,输入 sudo passwd root 指令: 安装SSH服务 ssh默认端口号是22,可以在/etc/ssh/sshd_config文件中修改 查看服务器否开启:ne ...
- Linux笔记1(安装,目录结构,远程登录,vi和vim,用户管理,实用指令。定时调度,挂载。)
1.linux的安装 1.先安装virtualmachine15.5 2.再安装Linux(CentOS7.6/centOS8.1) 首先在自己的window电脑上安装虚拟机,然后虚拟机相当于一台电脑 ...
- linux root登录失败可以锁定,Centos 用户登录失败N次后锁定用户禁止登陆
针对linux上的用户,如果用户连续3次登录失败,就锁定该用户,几分钟后该用户再自动解锁 Linux有一个pam_tally2.so的PAM模块,来限定用户的登录失败次数,如果次数达到设置的阈值,则锁 ...
- ubuntu无法远程root远程登录(远程调试)root直接登录(root用户登录)(创建root用户,新建root用户)PermitRootLogin yes(prohibit-password)
①如果没有root用户,先创建root用户 打开终端(ctrl+alt+t) 1.输入 :sudo passwd root 2.输入 : 输入user的密码 3.输入 :输入新的UNIX密码 4.输入 ...
- 微信小程序之授权登录(附完整源码)
个人博客上已经同步更新了文章,有目录索引,阅读起来比较方便,欢迎大家移步个人博客上读阅~ 个人博客地址:http://zwd596257180.gitee.io/blog/2019/04/15/wec ...
最新文章
- pidstat 命令详解(转载)
- myeclipse使用maven整合ssh配置
- pycharm 远程调试
- Junit实现接口类测试
- Dubbo和SpringCloud的区别
- 程序员面试金典 - 面试题 08.03. 魔术索引(二分递归)
- (王道408考研操作系统)第四章文件管理-第一节9:文件系统的层次结构
- linux的nice命令用法,nice命令详解
- boostrap中模态框显示在阴影之下
- 【IScroll深入学习】解决IScroll疑难杂症
- html项目案例_非常时期的健身IP案例-营销100案之8
- wince车机刷carplay_WINCE 使用 CarPlay,老唐开新花
- 4G标准LTE成争执焦点 中兴华为或以和解收场
- vue v-if未生效问题
- 从阿里一面谈面试需要准备什么
- 【洛谷 2958】木瓜的丛林
- SAP中事务码SQVI快速浏览器
- 洛谷 P1878 舞蹈课 —— 小顶堆
- faster-rcnn 训练自己的数据集
- 移动互联网,政府服务怎么做?