实现QQ在别处登录,被迫下线

httpSession绑定,为每个登录用户绑定一个sessionid,放到map集合中
当用户重复登录时,将map中对应的user删除,再删除session中的user
或者在表中定义一个boolean型的status,当用户第一次登录时,将status值设为false。
实现:
1,创建servletContextListener,当服务器运行时,创建一个Map集合
 Map<String,HttpSession> sessionMap = new HashMap<String,HttpSession>();
 将sessionMap放入ServletContext作用域中
 servletContext.setAttribute("sessionMap",sessionMap);
在web.xml中配置servletContextListener
2,用户登录
获取表单参数loginName,password
获得servletContext上下文
sessionMap = request.getSession.getServletContext().getAttribute(sessionMap);
获得httpSession
currentSession = request.getSession();
判断数据库中是否存在该用户是否合法
user = userService.load(loginName,password)
if(user!=null){//合法用户
 if(!sessionMap.containKey(loginName)){//如果sessionMap没有loginName关联的session说明用户未登录
  currentSession.setAttribute("user",user)
  sessionMap.put("loginName",currentSession)
  return mapping.findForword("success")
 }else{//存在对应的session,先将先登录的session删掉再将现在用户的currentSession放到servletContext作用域中
  //1,删除操作
  HttpSession session sessionMap.get("loginName")
  session.remove("user")
  sessionMap.remove("loginName")
  //2,增加操作
  currentSession.setAttribute("user",)
  sessionMap.put("loginName",currentSession)
  return mapping.findForword("success")
 }
}
request.setAttribute("errorMessage","登录名或密码错误")
return mapping.findForword("error")
3,用Ajax与Jquery实现动态刷新,验证该用户是否在别处登录(仿造QQ,用户在别处登录,被迫下线)
validate.jsp
<script language="javascript" src="jquery.js">
<script>
    function refresh(){
         var url = "${basePath}/userAction.do?method=validate&t="+new Date()//
         $.get(url,null,function(relogin){
 if("relogin".equals(relogin)){
  $("#messageArea").html("您的QQ在别处登录,被迫下线")
 } 
          });
   } 
   window.setInterval("refresh",3000)//每隔3秒调用refresh方法
</script>
<body>

<p id="messageArea"></p>
</body>

UserAction中的validate()
sessionMap = request.getSession().getServletContext().getAttribute("sessionMap")
currentSession = request.getSession();
if(currenSession==null){//如果当前用户没有session,即在别处登录
 response.getWriter.writer("relogin")
}
return null
缺陷:此为B/S结构,无状态的连接,无法实时响应服务器,而且在登录后的每个页面动态刷新(性能太差,或许也可以定义frameset,将动态刷新放置top.jsp中,但是会在main.jsp中出现404错误,如果是用struts2实现,可以用拦截器,当用户再次发动请求,转至login.jsp),动态提示该用户是否在别处登录,只是模仿QQ的功能,如果有不正确的地方,或者有更好的见解,请指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值