您的位置:首页 > 其它

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

2016-05-10 21:26 330 查看
1

可以放到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要自己写时间 不太好弄 不适合集群环境
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: