防止用户多次登录的两种做法

可以放到redis 缓存里面维护一个在线用户列表  可以用这个用户id 为key  的一个结构比如sorted set,

 在登录的时候或者退出的时候维护这个结构,

设置过期时间  加上超时的时间戳 在集合里面 (结合一些监听sesson对该集合修改 类似方法2)

 然后后面有人在用已经登录的用户来登录从缓存里面查到, 就不让他登录。 



2.   

 另一个办法就是就是类似我转的那个文章 将登录信息存到 session里面 ,同时维护一个loginusermap,
 ,map 以sessionID为key vusername 为value  ,, 每个用户登录要便利当前map看是否当前vusername已经登录  
 String sessionId = super.getSessionId(false);  
                if(loginUserMap==null){  
                    loginUserMap = new HashMap<String, String>();  
                }  
                for (String username : loginUserMap.keySet()) {  
                    //判断是否已经保存该登录用户的信息         或者     如果是同一个用户进行重复登录那么允许登录  
                    if(!username.equals(result.getFuUserName()) || loginUserMap.containsValue(sessionId)){  
                        continue;  
                    }  
                    isExist = true;  
                    break;  
                }                 
                if(isExist){  
                    super.setRequestAttr(Constant.MESSAGE, "抱歉,该用户已登录!");  
                    return "error";  
                }else {  
                    loginUserMap.put(result.getFuUserName(), sessionId);  

                }     后面还有监听该session 销毁时候 删掉map对应用户的信息

http://blog.csdn.net/albertfly/article/details/51224218



做法1 2 类似只是一个存到缓存 一个内存里面

redis可以适合分布式部署,第二种内存的话 map要自己写时间 不太好弄  不适合集群环境


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值