入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

web端同一账户同时登陆踢掉前一个登录的用户

创建时间:2017-07-25 投稿人: 浏览次数:106

       项目要求同一个账户只能在一处登录,如果同时登陆了就把前一个登录的踢掉。

       1.首先在你的controller中定义两个参数

// 用户和Session绑定关系
	public static final Map<String, HttpSession> USR_SESSION = new HashMap<String, HttpSession>();
	// SessionId和用户的绑定关系
	public static final Map<String, String> SESSIONID_USR = new HashMap<String, String>();
因为用户登录成功后,用户的数据是放在Session中保管的,所以要保存session与用户的关系及sessionId与用户的关系。

当用户登录后,我们要把用户数据放到session之前检查一下当前用户是否登录 ps:这步是实现踢掉用户的关键

2.检查当前用户是否登录

/**
	 * 
	 * 用户登录时的处理
	 * 
	 * @param request
	 * 
	 */

	public static void userLoginHandle(HttpServletRequest request) {
		// 当前登录的用户
		String userName = request.getParameter("userName");
		// 当前sessionId
		String sessionId = request.getSession().getId();
		// 删除当前sessionId绑定的用户,用户--HttpSession
		USR_SESSION.remove(SESSIONID_USR.remove(sessionId));
		// 删除当前登录用户绑定的HttpSession
		HttpSession session = USR_SESSION.remove(userName);
		if (session != null) {
			SESSIONID_USR.remove(session.getId());
			session.setAttribute("msg", "您的账号已经在另一处登录了,您被迫下线!");
		}

	}

如果用户已登录,则将用户与session及sessionid与用户关系的两个参数中相关数据通过key的形式清掉,并且向这个session发送消息。


3.前台页面接收消息

由于jsp中获取session不能实时更新,所以我们需要写个定时js方法,不断去获取session的数据

在页面<body>标签添加onload事件绑定checkLogin方法

function checkUserOnline(){
	$.ajax({
        type:"POST",
        url:"/gangcheng/login/checkUserOnline",
        data:{},
        success: function(data){
        	msg = data;
        }
    });
	
	 if(msg=="null"||msg==""|| msg == "undefined"){
         return;
      }else{
         alert(msg);
    	 提示完信息后,调用你的注销用户方法
      }
}
function checkLogin(){
	 check = setInterval("checkUserOnline()",500);
}
调用的后台方法如下

/**
	 * 判断用户是否同时登陆同一个用户
	 * 
	 * */
	@RequestMapping(value="/checkUserOnline")
	@ResponseBody
	public void checkUserOnline(HttpServletRequest request,HttpServletResponse response) throws IOException{
		HttpSession session=request.getSession();
        PrintWriter out = response.getWriter();
        out.print(session.getAttribute("msg"));
	}

因为我们登录用户的时候做了第二步的操作,所以这边我们调用后台的时候可以取到session中msg的数据,如果有msg则你被别人顶掉了。需要重新登录。

到这里如果没有看懂的话,建议你跟着我的步骤,一步一步copy,完事之后再去自己理解,这个方法有一个缺陷的地方就是同一个浏览器,session是一样的,就会只能记录一个最近登录的用户,前面你登录过的用户就不会再被顶掉了,一般项目是不会有同一个人同时登陆两个用户的情况。如果会有这种情况,那么这种方法不适合你,你需要自己再改动改动

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
  • 上一篇:没有了
  • 下一篇:没有了
未上传头像