在用户登录网站成功后,我会把用户登录IP及其相关信息写入数据表,目的就是防止用户2次登录,相当于是锁定吧。   正常情况下,用户点击页面上的“退出系统”按钮,我就会清空登录时记录的数据表信息,也就是解锁了,但是如果用户没有点击“退出系统”,而是直接关闭浏览器或者在进程里面杀掉IE进程,那就没有触发解锁那个动作,也就是数据表没有清空,这样就导致了客户无法再次登录系统。
     
          问题描述如上,各位大侠们,有啥好的想法,都说说,感谢大家了,小弟分也不多,说点好听的图个吉祥,也快春节了,祝所有看帖者,顶帖者春节快乐,发财一辈子!!

解决方案 »

  1.   

    正好我昨天在想这个算法,我的方法为:
    login_trace: login_time(登录时间), online_time(当前在线时间)
    登录信息里加上登录时间和用户当前在线时间,用户每隔一段时间给服务器发送一条消息(如10秒),表明在线,然后修改用户当前在线时间。用户再次登录时,如果登录记录存在,取得当前在线时间加上间隔时间,如果大于现在的时间(再次登录的时间),表明已经登录过了,如果小于,则表明上次用户是异常退出,可以进行登录。
      

  2.   


    感谢你的回复
    首先得肯定你这个方式,但是很遗憾,我用不了这个方法,因为底层都是封装好的,比如:登录,退出等等操作都是通过接口的方式,我只能是调用清空记录的接口,就像正常情况下,点击按钮调用接口方法清空记录,我想的是每个用户都有一个独立的Session,能不能在Session销毁的时候来调用清空记录的接口,但是不知道怎么弄,纠结
      

  3.   

    如果碰到这种情况,你可以在后登录者的页面上写上:
    检测到您未正常退出,是否强制退出上一个会话?如果选择“是”,就把数据库上次的会话信息正常退出掉,并让新的人进来。
    但是,如果这种操作针对的是普通用户的话,就没必要这样设计。b/s或者http基本是无状态的,所以没必要搞个这样的锁定,强制要求每个用户必须手工退出。
      

  4.   

    2楼的朋友,您的方法,挺不错的,但我还得加上点东西,
    因为有用户同ID同时登录的情况。
    所以不如对SESSION做一个遍历,不过对于企业外部应用,就比较难了,因为用户太多了。
      

  5.   

    在Session释放事件里面把数据库里面的这个锁记录删除掉 然后设置Session时效短一点,
    然后,你比较ip地址  同一个机器允许重复登录,不同机器不允许登录
      

  6.   

    session监听你知道吧?可以监听session的销毁事件,从而进行相应的操作,简单的例子:import javax.servlet.*; 
    import javax.servlet.http.*; public class SessionCount implements HttpSessionListener 

    private static int count=0; public void sessionCreated(HttpSessionEvent se) 

    System.out.println(“session创建:”+new java.util.Date()); 
    } public void sessionDestroyed(HttpSessionEvent se) 

    System.out.println(“session销毁:”+new java.util.Date()); 

    } 然后简单的配置一下这个监听就可以了。
      

  7.   

    我做这个需求的时存了个sessionId,查的时候只用这个和userId 表中 sessionId 存在客户cookie中,及服务器表中
    登陆时查询
    sessionId在,userId在 正在登陆用户重复登陆
    sessionId不在,userId不在 用户正常退出现在在进行登陆
    sessionId不在,userId在 帐号重复登陆
    sessionId在,userId不在 登陆未正常退出在做重复登陆
    正常退出时删除该登陆记录
    BUG,当客户端清掉节Cookie会有问题,解决就是每天定时清除这张表记录
      

  8.   

    应该是用session监听器来解决此问题
      

  9.   

    我@#¥%#¥&…×&(×)
      

  10.   

    这东西放在服务器端管理最安全。而且HTTPSession的生命周期管理,web容器已经实现了。在Session的各种生命周期状态监听和事件接口中跟踪用户状态
      

  11.   

    用 SessionListener 吧,11 楼的代码,在 sessionDestroyed 方法中注销用户。另外在 web.xml 把这个 listener 配置一下就可以了。