日期:2014-05-17  浏览次数:20672 次

web项目实现不能重复登录
   最近写了一个小的web项目,要实现用户不能重复登录的功能。我是给用户表添加了一个用来标记用户登录状态的字段(1、未登录 2、已登录)。每次用户登录时候会在action中先判断该用户的登录状态,如果是1则正常登录。否则提示该用户已登录,不能重复登录。当用户点击注销时候就会走action修改该用户的登录状态,然后跳转到登录页面。现在遇到一个问题就是:如果用户没有点击注销而是直接关闭浏览器,或者刷新浏览器就不能正常修改该用户的登录状态。也就是该用户下次就不能登录了。。。。
   我是个菜鸟,现在遇到这个问题不知道该怎么处理。。。。求帮助。。哪位大侠帮忙指点一下。万分感谢

------解决方案--------------------
需要考虑两点 :
1、用户主动关闭浏览器
可以使用
  window.onbeforeunload=function (e){
  if( window.event.clientY < 0 
------解决方案--------------------
 window.event.altKey){
       //alert("你关闭了浏览器");
  $.ajax({
url:"${ctx}/system/user/user!logout.action",
type:"post",
success:function(){}
  });
  }else{
       //alert("你正在刷新页面");
  }
  }

2、session自动到期

可以写一个SessionListener 监听器  实现HttpSessionListener的sessionDestroyed()
session销毁后重置你的字段。。
------解决方案--------------------
好像有个监听session内容变化的监听器HttpSessionAttributeListener,可以百度看一下,可以实现单态登陆
------解决方案--------------------
如果用户没有点击注销而是直接关闭浏览器,或者刷新浏览器就不能正常修改该用户的登录状态。
1. 自动登录:浏览器端用Cookie保存用户的登录信息,如用户名,密码。
2. 登录状态保存:
    a. 用Session在服务器端保存用户已登录的状态。
    b. 用数据记录登录状态也可以,下次登录的时候,看看上次注销或者登录的时间(处理你正好遇到的这个问题)就可以了。但是浏览器端需要定时的发一个请求更新登录状态。
------解决方案--------------------
总的来说,如果登陆了就不让用户登陆这种来说可能会出现一些问题,因为在一些情况下你无法得到用户退出系统的事件。
1.提示用户,某某用户正在登陆使用。
2.session失效的时候注销用户的登陆
------解决方案--------------------
session记录你的用户登录状态,失效时改变状态。这个是否登录记录在数据库中,应该是有点问题的。你可以考虑下不这么做。