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

解决方案 »

  1.   

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

  2.   

    http://topic.csdn.net/u/20100707/18/694a8848-35a5-468b-bc9b-50441c9a2459.html
    我原来也遇到过这个问题,公司是用的是SSO。
      

  3.   

    AJAX心跳 Session设小
    再利用JS的BeforeUnload事件处理
    项目在用的
      

  4.   

       这是一个比较难的问题,那学期做的在线银行系统我是用的session来完成的,但是只能是在1台电脑上使用能完成了不能同时登录,如果换了台电脑就不行。   然后就考虑到在数据库中用一个字段来保存该帐号的登录状态,但是又会出现死锁的问题,这个问题确实有点难度。
      

  5.   

    使用Application 储存用户名 判断是否存在
      

  6.   

    在解决同样的问题,我的方法登录用户缓存,session有效时间设置为20秒,每15秒发一个信息给服务端,当浏览器关闭,或不正当退出最多20秒可以再次登陆。问题,网速不怎么样的时候,服务器忙的时候可能出现session失效。
    正在想别的好方法
    楼主你有好方法了分享一下。
      

  7.   

    登录是创建与用户信息、登录时间和IP相关的令牌
    1如果能够要求用户必须支持cookie的话 登录成功后用户本地保存一个令牌
    每次请求都读取cookie令牌信息
    如果令牌过时则需重新登录
     
    2把令牌放在SESSION里 然后最新令牌信息进行持久化 如果SESSION里的 比持久化的信息老 就说明需要重新登录了
      

  8.   

    还有谁有更好的解决方案吗,一定要用sso单点登录吗?
      

  9.   

    javax.servlet.http.HttpSessionListener
    Implementations of this interface are notified of changes to the list of active sessions in a web application.
      

  10.   


    $(document).ready (function()
        {       
             window.onbeforeunload=function (){
                clearLblErr();
                if((window.event.screenX - window.screenLeft) > (document.documentElement.scrollWidth-20) ||   window.event.clientY < 0 || window.event.altKey)   
                { 
                    
                    $.ajax({
                      async:false,
                      url: "AbandonSession.aspx",
                      cache: false,
                      success: function(msg){
                      }
                    });
                }       };
        }      
    );
    LZ参考一下~