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

可以放到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();  
                }  
                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要自己写时间 不太好弄  不适合集群环境


你可能感兴趣的:(web,server)