防止用户多次登录的两种做法
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要自己写时间 不太好弄 不适合集群环境
可以放到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要自己写时间 不太好弄 不适合集群环境
相关文章推荐
- Fedora 14 系统安装
- HTML 1<2-11>
- 图像特效---(Instagram)1977滤镜
- [Spark优化]在Spark中使用Kryo序列化
- 软件结构图
- Linux常用操作
- http-客户端识别与cookie机制
- 迷宫的实现
- Services的生命周期
- gdb使用方法简介(转)
- Fedora 13 系统安装
- Effective C++----3rd Edition, Item 2:用consts,enums和inlines取代#define
- 利用管道化连接下载网页 Java
- 树
- 网络编程——基础及通讯要素
- 过滤输入htmlentities与htmlspecialchars用法
- 放盘子
- 图像特效---(Nostalgla Filter)老照片滤镜
- 编码器
- 教师兼干部类