最近的web项目里要求同一账号不能同时登陆!
想了几种方法都有漏洞,谁有可行性方案。不甚感激!

解决方案 »

  1.   


    可以 此类问题最难的地方是用户非法退出。可以通过session超时解决。
      

  2.   

    我也遇到过类似问题,加字段有漏洞,如浏览器异常关闭。标志还是登录状态,其实这时间已经异常退出了。
    web版不好处理,都有一定的漏洞。服务端定时扫描客户端比较浪费资源。
      

  3.   


           用session超时则非法退出之后到session过期之前该账号将不能登录了!
      

  4.   

    情况之一:第一个用户等陆了,不允许第二个用户登录。
    情况之二:第一个用户登录了,第二个用户登录挤掉第一个。
    针对于第一种情况,可以在数据库设置用户状态,也可以在缓存,这个很容易实现,现在讨论浏览器异常关闭
    的情况如何处理
    可以考虑以下3个方法:
    1。session失效,实现比较简单,也很保险,但缺点是实时性太差。
    2。ajax轮询,也就是在客户端写个定时器,定时通过ajax方式发送一个信号到服务端,当服务端过了最大时间都没有接收到信号说明客户端已经关闭。
    3。客户端用一个脚本监测是否关闭
    window.onbeforeunload = function onunload_handler(){
     //浏览器关闭的时候会执行到此处
      //处理用户信息,使之变成离线状态
    }IE fireFox支持
      

  5.   

    关于第二种情况:可以通过管理session来实现,后一次登录的获得前一次登录的session,并主动让其失效,因为这个失效是瞬间的,所以前面登录的用户被挤掉了。
      

  6.   

    登陆的时候 session绑定到服务器全局变量中另外一个地方登陆的时候把前一个挤出来  两个地方登陆的id一样 如果存在id一样 登陆ip不同 则挤出
      

  7.   

    后一次登入如何获得前一次的session?
      

  8.   

    将用户登录信息存application中服务器多插几根内存条。。呵呵
      

  9.   

    我做过这个问题的,当时用而是APPLICATION处理的,Application里面放上时间和用户名,这样用户推出就清了,别的同一用户才能再次登录,还有就是时间过了自动会清用户的,不过时间不到就不能登录的
      

  10.   

    用这样的实现或者用框架实现原理差不多 用springsecurity
      

  11.   

    设置登陆状态。
    加一个session 监听器
      

  12.   

    维护个在线用户列表,做个重复登录踢除机制,也可以配合session超时
      

  13.   

    楼主可以在数据库增加字段再结合session做
      

  14.   

    做一个监听类,每个用户登录的时候使用监听类把用户的id写入session,每次登陆的时候都去检查session中是否存在,如果存在就不允许登录,每次退出系统的时候从session中移除该用户的id
      

  15.   

    你可以做个session监听,对所有有效的session进行管理,就是把他们保存在全局变量中,并让它跟当前的用户绑定在一起,
    下一次这个用户可以根据userId之类的信息找到上次登录但还没失效的session,并让其失效
      

  16.   

    先设置session 的有效期为10秒(设置比较短的时间)
    在页面上写 用js 访问session的代码(可以使用ajax)(用定时器 定时访问当前登录用户的session,保持 session的可用性)。
    当浏览器异常退出,或者被关闭, session将不会再被访问到,这样session超时10秒,就会销毁。 或者用户注销 ,服务器主动销毁session。当一个用户登录的时候 只要浏览器没有被关闭,session应该是一直都有效的。 只要用户一关闭浏览器。过十秒后,session就会超时销毁。当一个用户已经登录,这个账户再次登录的时候,只需判断是否在session存在。。如果存在 则是已经登录 不存在则没有登录 
      

  17.   

    把用户一登陆 将其对象放session里。再登陆判断该对象是否登陆或者超时。超时就可以再登陆。
      

  18.   

    楼主可以考虑使用一个application来记录所有登录的用户,然后再使用session监听器来监控,在有用户新登录时先从application里面查找是否已登录,没有才加入,如果存在,则提示用户该用户已登录。
      

  19.   

        通过Session的监听类,获取用户的登出,登入;所有登录的信息都先做下面的匹配,再将userid 和 sessionId放到HashMap 中。
        用户登录时,先判断hashmap中当前用户的userid是否存在,若不存在,则添加到键值对,若存在,且后面的sessionId跟当前登录的不一样,先取出先前的seddionid做删除操作,而后重置当前的sessionId。
        用户登出时,直接对hashmap里面的sessionId操作删除
      

  20.   

    现在我也遇见了相同的问题,application and session 并用,结果效果不咋滴,数据库加字段也是不完整,请问楼主出结果没,给点资料呗~~
      

  21.   

    ip + user-agent验证即可!