srping mvc 同一账号不能同时登录,后者登录能够挤退前者,不知道怎么运用session来实现,大神们快来速速指教。最好有简单的登录案例,谢谢了。

解决方案 »

  1.   

    这个不是主要用session实现吧
      

  2.   

    登录的时候判断session存在不,如果存在了就先清空session再添加登录session。这样之前登录的那个浏览器就不是登录状态了
      

  3.   

    登录之后放到redis ,下一次登录判断redis中。
      

  4.   

    需要手动写代码实现
    使用中间件容器校验的话,可以比较缓存的username和remoteUser的值
      

  5.   

     UserVO vo = (UserVO) session.getAttribute("userLogin");
    用这个不灵的,老是为空,毕竟sessionID是跟随浏览器而产生或者销毁。
    有没有其他方式来进行处理呢??
      

  6.   

    判断session中name是否存在,存在的话移除,然后重新赋值那么就可以达到效果了
      

  7.   

    这个还不容易,写个hashmap来保存已经登陆的username和对应的session,当然了,要注意一下session的销毁,销毁的时候,清空这个map中的信息.每次判断就行了,如果要实现挤退的话,就是通过map获取到session的话.直接销毁这个session好了,当那个访问的时候,自然就要重新登陆了.登陆时
       根据username判断map是否有session
                    有就让session失效
                    没有当然就是将当前的username,session映射到map中去了.
    session 销毁时
               取出session中的username,清空map中对应的username,session
      

  8.   


    登陆时
       根据username判断map是否有session
                    有就让session失效
        将当前的username,session映射到map中去了.
    session 销毁时
               取出session中的username,清空map中对应的username,session 
      

  9.   

    这个让session失效,先前登录的客户端浏览器会得到通知,自动下线吗
      

  10.   

    楼主这个用session实现应该是很简单的啊。我觉得7楼基本把思路已经说得很清楚了。
    我把语言重新组织下:
    系统启动时建立一个全局HashMap,随便用一个类建立一个静态成员变量即可。
    每当登录成功时,用登陆者的username去HashMap中检查有无对应的session。
    如果没有表示第一次登录,put进HashMap。
    如果有就注销这个session(其实就是调用注销账户的代码),同时把后登录这个session  put进HashMap。这个代码很难写么?很难么??
      

  11.   


    直接注销这个session,先前别处浏览器登录的会自动得到通知下线吗,不需要写个轮训或者websocket让它自动下线吗?
      

  12.   

    我真不知该怎么和你说,我觉得你把概念搞混了,session和websocket两者根本就是不同的东西。
    session用于无状态(也可理解成短连接吧)web通信(也就是说浏览器发完一个申请收到回复后就和服务器断开通信连接了,为了保证这个客户下次访问能获取上次的状态,所以才发明了session这个东西,一般的规范是在浏览器的cookie里植入一个sessionid,每次发送统一url时会将这个带到服务器,告诉服务器我又来了!)。
    为什么设计成无连接通信,因为web面对成千上万的客户端,大部分时候他们是不会连续发申请的,所以没必要保持长连接。
    而websocket用于长连接web通信,类似socket。一般来说长连接长时间占用服务器资源是一种浪费,所以只有在特定场合下使用。
    而且现在不是所有浏览器都完全支持规范的websocket,现在还没有形成很广的应用。回到你的疑问【先前别处浏览器登录的会自动得到通知下线吗】,根本不需要,因为当它进行下次任何一次连接时(比如点击某个链接),服务器会侦测到 它的session已注销,会自动跳转到登录页面,这和你长时间不操作某个登录后的页面,系统会自动跳到登录页面时一个道理。
    当然,你要说这样显得不友好,没经过他同意就注销掉他,难道就友好了?
      

  13.   

    是用Spring Security吗?
    自定义 RememberMeService 很容易实现。