同一个账号只能一处登录
来源:互联网 发布:理光软件研究所 户口 编辑:程序博客网 时间:2024/06/05 18:50
有些系统要求用户账号不能在多浏览器同时登录,只能在一处登录,若该账号在别的地方登录了,则之前登录的账号再次操作时,就会跳转回登录页面.
设计思路:
- 一个USERID只能对应一个SESSIONID;
- 如何存储这个键值对,两种选择, 存数据库, 或是缓存中, 当然这种频繁需要查询操作的不建议存到数据库中;
代码思路:
//用户登录验证,加入用户session信息到缓存中public String LoginCheck(HttpServletRequset request){ //根据传来的userName和password获取对应userId ... //判断用户session信息是否存在于缓存中 boolean isExists = isExistsUserSessionInfo(userId,request.getSession().getId()); if(isExists == false){//不存在,添加入缓存 //将userId 和sessionId 存入缓存中 ... }}----------//用户admin在浏览器A访问,核心拦截器代码public boolean preHadnle(HttpServletRequest request,HttpServeltResponse response,Object handler){ //缓存中userId sessionId 是否存在 boolean isExists= false; //判断用户是否已经登录 Object userId = request.getSession().getAttribute("userId"); if(null != userId ){ String sessionId = request.getSession().getId(); isExists = isExistsUserSessionInfo(userId.toString(),sessionId); } //缓存中 用户session信息不存在 if(isExists == false){ //如果是ajax请求响应头会有x-requested-with if(request.getHeader("x-requested-with") != null &&request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")){ //让回调函数重新发起请求至登录页面 response.setStatus(900); response.setHeader("Location",request.getContextPath+"BackLogin.html"); return false; } //正常请求, request.getRequestDispatcher("BackLogin.html").forward(request,response); return false; } return super.preHandle(request, response, handler); }---------- //检查某个用户的session信息是否存在,存在说明用户在当前浏览器已经登录了,否则在该浏览器未登录 public boolean isExistsUserSessionInfo(String userId,String sessionId){ //从缓存中读取该用户对应的sessionId Object cacheSessionId = 缓存("userID"); //读取的sessionId为null,说明用户没在任何一处登录 if(null == cacheSessionId ){ return false; } //当前sessionId 和缓存中的 sessionId 不相等,说明该账号在其他浏览器登录了,这边正在访问的浏览器要下线了 if(sessionId != newSessionId){ return false; } return true;---------- //用户session @RequestMapping("/BackLogin.html") public String BackLoginIndex(HttpServletRequest request){ request.getSession().invalidate(); //清空session 中的所有数据 return "login"; }
0 0
- 同一个账号只能一处登录
- php 实现同一个账号同时只能一个人登录
- 如何做到同一个账号同一时段只能登录一个
- spring实现同一账号同一时间只能在同一个地方登录
- 如何保证同一个账号同时只能在一个设备登录,账号自动登录
- 实现同一个用户只能有一个登录
- php 实现同一个账号同时只能…
- 限制一个账号同时只能在一处登陆
- 同一账号同一时间只能登录一次
- 怎样实现同一个账户同一时间只能在一个终端登录
- WEB同一账号只能登录一次 常用解决方案
- Spring Security 一个账号同一时刻只能登录一次
- 实现网页同时只能有一个账号登录
- Shiro限制帐号只能在一处登录
- Shiro限制帐号只能在一处登录
- Asp.net 实现只能允许一个账号同时只能在一个地方登录
- 一个帐号同一时间只能一人登录
- 一个帐号同一时间只能一人登录
- 越狱计划之背包初步--01背包
- 一个例子说明虚函数
- LeetCode之Path Sum II
- 1094. The Largest Generation (25)
- 子网划分的两个例子 怎么算网络号和广播地址
- 同一个账号只能一处登录
- Equinox OSGi系列之一 Equinox入门
- 我的openwrt学习笔记(九):开发板访问虚拟机 ubuntu linux 文件方法
- 普元日记---HTML5底部遮罩层
- 如何处理word转pdf格式的转换
- 解决imageView加载图片时候造成内存溢出的问题
- TCP 第三次握手失败
- js 返回上一页和刷新
- python—networkx:在一张图中画出多个子图