实现只能一个用户登录

功能:当你在一台电脑上登录了账号,然后又在另外一台电脑上登录(同一个账号),就立马提示前一台账号下线通知,就和QQ等下线通知一样。

实现思路:将用户的登录信息保存在application和session内置作用域内, 然后在首页写个定时器,轮询某ajax方法(检查application和session是否相等,不相等则弹出“用户在其他地方登录信息”)。

示例代码:

1、登录时判断该用户的application是否存在,如果已经存在,换个其他值。

 
 HttpSession session = ServletActionContext.getRequest().getSession();
			ServletContext application = session.getServletContext();
			if(application.getAttribute(t_user.getName())==null){
				application.setAttribute(t_user.getName(), "1");
				session.setAttribute(t_user.getName(), "1");
			}else{
				if(application.getAttribute(t_user.getName()).toString().equals("1")){
					application.setAttribute(t_user.getName(), "2");
					session.setAttribute(t_user.getName(), "2");
				}else{
					application.setAttribute(t_user.getName(), "1");
					session.setAttribute(t_user.getName(), "1");
				}
			}
 

2、Ajax代码:

public String reLoginAjax() throws Exception{
		HttpSession session = ServletActionContext.getRequest().getSession();
		ServletContext application = session.getServletContext();
		System.out.println(session.getAttribute("userName").toString()+"开始监控了。。。。。。。");
		msg = "true";
		String userName = session.getAttribute("userName").toString();
		if(!session.getAttribute(userName).equals(application.getAttribute(userName))){
			msg = "false";
		}
		return "success";
	}

3、首页加定时器,因为是轮询application内容,所有消耗很少。 

var	timer = null;
function reLogin(){
var loginName = "aaa"; 
var url = 'ReLoginAjax.action';
       var params = {
               loginName:loginName
       };
       jQuery.post(url, params, callbackFun1, 'json');
}
function callbackFun1(data){
  	var msg = data['msg'];
  	if(msg=='false'){
  		clearInterval(timer);
  		alert("该用户在其他地方登录!");
  		window.top.location.href="login.jsp";
  	}
}	
 	timer = setInterval(function(){
	reLogin();
	}, 5000); 

猜你喜欢

转载自lshh83.iteye.com/blog/2354070