这本来是一个可有可无的问题,不过不保证客户是否会有这方面的需求。废话不多说,先来看同一用户不同终端限制登录的解决方法。

方法很简单,大致思路就是做出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
    无功能交叉,功能实现互不影响。放心大胆的用吧。

同一用户不同终端登录限制(附:同一浏览器不同用户登录解决方案)相关推荐

  1. C# 网络编程之网页自动登录 (一).使用WebBrower控件模仿登录

    C# 网络编程之网页自动登录 (一).使用WebBrower控件模仿登录 最近学习C#网络编程中,想实现网页自动登录并提交GET/POST信息,再实现循环登录不断发送报文给服务器,服务器发送消息给客户 ...

  2. 通达OA v11.7 在线用户登录漏洞附自写poc

    文章目录 二.漏洞影响 三.漏洞复现 四.漏洞利用POC 五.总结 本文就介绍了通达OA v11.7 在线用户登录漏洞利用方法,及自己写的poc. # 一.漏洞描述 通达OA v11.7 中webro ...

  3. linux 当前活动用户,如何在Linux上自动记录所有用户的终端会话活动

    如何在Linux上自动记录所有用户的终端会话活动 不久前,我们写了一篇文章,使用script命令记录Linux终端会话活动. 今天,我们还将讨论相同的主题. 但是,本教程允许您自动记录所有用户的终端会 ...

  4. php jquery ajax登录,jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)

    弹出层主要用于展示丰富的页面信息,还有一个更好的应用是弹出表单层丰富交互应用.常见的应用有弹出登录表单层,用户提交登录信息,后台验证登录成功后,弹出层消失,主页面局部刷新用户信息.本文我们将给大家介绍 ...

  5. ubuntu服务器ssh登录密码修改,Ubuntu-18.04 下修改root用户密码,安装SSH服务,允许root用户远程登录,安装vsftp服务器...

    修改root用户密码 打开终端,输入 sudo passwd root 指令: 安装SSH服务 ssh默认端口号是22,可以在/etc/ssh/sshd_config文件中修改 查看服务器否开启:ne ...

  6. Linux笔记1(安装,目录结构,远程登录,vi和vim,用户管理,实用指令。定时调度,挂载。)

    1.linux的安装 1.先安装virtualmachine15.5 2.再安装Linux(CentOS7.6/centOS8.1) 首先在自己的window电脑上安装虚拟机,然后虚拟机相当于一台电脑 ...

  7. linux root登录失败可以锁定,Centos 用户登录失败N次后锁定用户禁止登陆

    针对linux上的用户,如果用户连续3次登录失败,就锁定该用户,几分钟后该用户再自动解锁 Linux有一个pam_tally2.so的PAM模块,来限定用户的登录失败次数,如果次数达到设置的阈值,则锁 ...

  8. ubuntu无法远程root远程登录(远程调试)root直接登录(root用户登录)(创建root用户,新建root用户)PermitRootLogin yes(prohibit-password)

    ①如果没有root用户,先创建root用户 打开终端(ctrl+alt+t) 1.输入 :sudo passwd root 2.输入 : 输入user的密码 3.输入 :输入新的UNIX密码 4.输入 ...

  9. 微信小程序之授权登录(附完整源码)

    个人博客上已经同步更新了文章,有目录索引,阅读起来比较方便,欢迎大家移步个人博客上读阅~ 个人博客地址:http://zwd596257180.gitee.io/blog/2019/04/15/wec ...

最新文章

  1. pidstat 命令详解(转载)
  2. myeclipse使用maven整合ssh配置
  3. pycharm 远程调试
  4. Junit实现接口类测试
  5. Dubbo和SpringCloud的区别
  6. 程序员面试金典 - 面试题 08.03. 魔术索引(二分递归)
  7. (王道408考研操作系统)第四章文件管理-第一节9:文件系统的层次结构
  8. linux的nice命令用法,nice命令详解
  9. boostrap中模态框显示在阴影之下
  10. 【IScroll深入学习】解决IScroll疑难杂症
  11. html项目案例_非常时期的健身IP案例-营销100案之8
  12. wince车机刷carplay_WINCE 使用 CarPlay,老唐开新花
  13. 4G标准LTE成争执焦点 中兴华为或以和解收场
  14. vue v-if未生效问题
  15. 从阿里一面谈面试需要准备什么
  16. 【洛谷 2958】木瓜的丛林
  17. SAP中事务码SQVI快速浏览器
  18. 洛谷 P1878 舞蹈课 —— 小顶堆
  19. faster-rcnn 训练自己的数据集
  20. 移动互联网,政府服务怎么做?

热门文章

  1. 华为重度渗透的欧洲,美国如何清剿?
  2. 几种常用交叉验证(cross validation)方式的比较
  3. 强化学习中的基础概念和术语——spinning up文档翻译
  4. 手机数据恢复华为荣耀X1智能手机32G内置存储手机严重损坏恢复照片聊天记录文档...
  5. 地铁在终点站是怎么掉头的?南京地铁怎么过的长江?
  6. 【高并发】- 指标介绍
  7. 最近的错误整理(LMY)
  8. 透明位图Ron Gery Microsoft 网络开发技术小组
  9. 宠物粮竞争后半场:国牌与洋牌的「信任保卫战」
  10. 使用Eclipse把java文件打包成jar