同一用户最新登录踢掉历史登录【原创】
前一段在开发一个项目中,需求人员希望能防止同一个用户在同一时间多次登录系统。于是在我们博客园里搜索相关文章,发现解决方案几乎都是千篇一律。见 防止用户多次登录
这种方案个人觉得有两点不足之处:
1、频繁与服务器交互
2、只要用户已登录,就不能再次登录了
我们知道在一台机子上登录QQ后,再到另外一台机子上同样也是可以登录的,不过之前登录的会被 踢掉。我觉得这种方案比较人性化。如果在家里登录QQ后,忘了退出,然后在公司登录时提示“此用户已经登录”,不知你会有何感受?!
解决方法:
1、 用户登录系统时,分配一个GUID给他。如果是用户是首次登录就往Application["OnlineUserList"]中添加一条记录,下次再登录,系统会重新分配一个新GUID,修改已存在的记录值。
2、页面继承基类中,判断客户端保存的cookie["UserOnlineID"] 值是否与服务端一致,如果不一致,则重定向到重复登录页面。
登录用户存入全局Application对象中,
Guid.NewGuid().ToString();
)
{
();
{
;
(userlist.ContainsKey(userId))
{
m_strUserOnlineID;
{
userlist.Add(userId, m_strUserOnlineID);
}
, userlist);
/* 登录用户存入全局Application对象中,
* 如果已存在,则修改系统之前分配的Guid标识
*/
string m_strUserOnlineID = Guid.NewGuid().ToString();
Dictionary<string, string> userlist;
if (Application["OnlineUserList"] == null)
{
userlist = new Dictionary<string, string>();
}
else
{
userlist = Application["OnlineUserList"] as Dictionary<string, string>;
}
if (userlist.ContainsKey(userId))
{
userlist[userId] = m_strUserOnlineID;
}
else
{
userlist.Add(userId, m_strUserOnlineID);
}
Application.Add("OnlineUserList", userlist);
WebGlobal.SetCookie("UserOnlineID", m_strUserOnlineID);
/******** End *******/
protected override void OnPreInit(EventArgs e)
{
base.OnPreInit(e);
//对登录用户进行页面访问验证
if (!string.IsNullOrEmpty(HttpContext.Current.User.Identity))
{
/* 获取客户端的用户在线标识Guid
* 如果标识Guid与服务端不一致,则重定向到重复登录页面
*/
string m_strUserOnlineID = WebGlobal.GetCookie("UserOnlineID");
if (!string.IsNullOrEmpty(m_strUserOnlineID))
{
Dictionary<string, string> userlist = Application["OnlineUserList"] as Dictionary<string, string>;
if (m_strUserOnlineID != userlist[HttpContext.Current.User.Identity])
{
Response.Redirect("~/subscribed.shtml");
}
}
/******** End *******/
}
}
Hope this helps
转载于:https://www.cnblogs.com/hailibu/archive/2009/06/09/1499744.html
同一用户最新登录踢掉历史登录【原创】相关推荐
- mysql踢掉登录用户_centos 强制踢掉某登录用户的方法
linux是一个多用户操作系统,用户可以在不同的地方链接上LINUX服务器,在系统中我们可以用w或者who来查看用户 [root@7273 ~]# who root pts/0 2018-05-5 2 ...
- Linux用root强制踢掉已登录用户
首先使用w命令查看所有在线用户: [root@VM_152_184_centos /]# w20:50:14 up 9 days, 5:58, 3 users, load average: 0.21, ...
- web端同一账户同时登陆踢掉前一个登录的用户
这边我们理想是使用localstorage去存取用户登录信息,因为是保存在客户端本地,无需访问服务器,且可实现永久保存,节省网络流量 关于cookie和session和storage的详细解说网址: ...
- 【Spring Security】如何实现多设备同一时间只允许一个账号登录(即前登录用户被后登录用户挤下线)?只需简单两步!
1.需求分析 在同一个系统中,我们可能只允许一个用户在一个终端上登录,一般来说这可能是出于安全方面的考虑,但是也有一些情况是出于业务上的考虑,需求就是业务原因要求一个用户只能在一个设备上登录. 要实现 ...
- springboot + shiro之登录人数限制、登录判断重定向、session时间设置
springboot + shiro之登录人数控制 项目 前篇:spring boot + mybatis + layui + shiro后台权限管理系统:https://blog.51cto.com ...
- 2021-01-15:用户登录,保存30天的免登,只允许两个设备登录,如果有第三个设备登录,踢掉第一个。改密码的时候,所有设备需要下线。这个逻辑怎么实现呢?
福哥答案2021-01-15: 一.我想到的答案. 为什么不能用设备id? 接口调用,如果是网页,设备id是无法获取的.另外,设备id可以作假. 为什么不能用ip区分? 有些网络(某些校园网),对外就 ...
- 通用权限管理系统组件 (GPM - General Permissions Manager) 中后一个登录的把前一个登录的踢掉功能的实现...
最近客户有需要,同一个帐户可以重复登录系统,但是后登录的账户需要把前面已经登录的账户踢掉,例如客户把电脑打开在别的电脑上然后换一个房间,或者换个办公楼想登录时就会遇到很多麻烦,遇到郁闷的情况就是死活无 ...
- java 登录踢出_spring security 4 如何踢出用户?
项目用的是spring boot 1.3 全javaconfig 配置 目的 : 我要踢出一个登录在线的用户,踢出后,剔出的用户再次访问服务器的时候会去到登录界面, security 配置 : htt ...
- 用户唯一登录,最新登录挤掉以前的登录,实现踢人.
最近在做一个功能,要求是这样的:相同的账号,例如admin账号,在A电脑登录成功,然后admin账号在B电脑登录,系统发现admin账号出现了重复登录,A电脑上登录的admin账号就会被退出登录. 流 ...
最新文章
- Microbiome:马铃薯疮痂病与土壤微生物组关系新进展
- (转) Docker EE/Docker CE简介与版本规划
- 全球著名 CMS 产品大全
- Java黑皮书课后题第5章:5.6(英里与千米之间的互换)编写一个程序,并排显示下面两个表格
- [攻防世界 pwn]——hello_pwn
- 南京大学获赠1.2亿!
- java 自定义 operator_见微知著——从自定义类型的operator==说起
- Python无参装饰器
- 手机内存8+128与6+256价格相同,你会选哪个?
- 自动驾驶是一门怎样的生意?盘点5家创业公司商业落地的3条逻辑
- java图书管理系统源代码_高校社团管理系统(ssm+mysql)
- Aiseesoft Data Recovery for mac(专业数据恢复软件)
- Windows安装numpy详细教程
- 自动补全 (自定义)拼音分词器 搜索时注意事项
- 分割 fasta 文件
- amd RX6800和rtx3070哪个好
- 全志V3s学习记录(13)OV2640的使用
- 2022-2028年全球冷轧钢卷行业供需分析及发展前景研究报告
- ges resource dynamic 和 ges enqueues较高导致数据库宕机
- 杜绝「断裂」【2022戴尔科技峰会预告】
热门文章
- ninjala服务器维护,Ninjala2.0版本更新内容一览
- cad vba编程从入门到精通_【科研资源02】C语言和C++编程110G从入门到精通自学教程...
- html文件整体结构,HTML文件基本结构
- Docker之Docker网络讲解
- asm冗余 oracle_oracle 11.2.0.1 rac 修改asm磁盘组的冗余模式(redundancy mode)为normal
- php r很卡,Laravel 在高并发下很卡?求大神解答
- android上最好的linux终端,如何在带有Termux的Android上使用Linux命令行 | MOS86
- arm汇编指令WFI和WFE
- 学习笔记--asp.net主题和外观(转自msdn,仅为自己学习存储和有意读者使用)
- mfc listbox删除多行