用redis和cookie做单用户登录
因为公司的项目需要用到单用户登录,于是今天用redis和cookie给系统添加了单用户登录功能,再次简单记录一下。
单用户登录是为了防止同一账户在不同电脑和不同浏览器里面同时登录。所以我这边的思路是:
1.用户登录A账号时,获取A账号信息和当前浏览器cookie里面的token信息结合起来存到redis数据库。
2.有其他用户登录A账号,更新redis里面的用户信息和token信息,以最后一次登录为准。
3.写拦截器拦截每个请求,在处理请求时,判断当前用户信息与token数据和redis里面的数据是否一致,如果不一致,则说明该账号在别的地方登陆过,则会提示重新登录。
代码如下:
在用户登录的方法里,写如下代码:将用户登录信息与浏览器token数据存入redis数据库
//更新redis里面的用户登录信息
string userid = userEntity.F_UserId;
string companyId = userEntity.F_CompanyId;
string token =Request.Cookies["__RequestVerificationToken"].Value.ToString();
cache.Remove(cache_userloginid + userid, CacheId.loginInfo);
UserLoginEntity userLogin = new UserLoginEntity();
userLogin.UserLoginID = userid + "_" + companyId + "_" + token;
TimeSpan cacheTime = TimeSpan.FromDays();
cache.Write<UserLoginEntity>(cache_userloginid + userid, userLogin, cacheTime, CacheId.loginInfo);
写拦截器,在每次请求时判断当前用户信息与token数据和redis里面的数据是否一致,根据结果做出反应
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// 判断当前登录信息是否存在
string userid = LoginUserInfo.Get() == null ? "" : LoginUserInfo.Get().userId;
string companyId = LoginUserInfo.Get() == null ? "" : LoginUserInfo.Get().companyId;
string token = HttpContext.Current.Request.Cookies["__RequestVerificationToken"] == null ? "" : HttpContext.Current.Request.Cookies["__RequestVerificationToken"].Value.ToString();
UserLoginEntity userLogin = cache.Read<UserLoginEntity>(cache_userloginid + userid, CacheId.loginInfo);
if (userLogin != null)
{
//有用户登陆中
string userLoginId = userLogin.UserLoginID; //redis中保存的用户登录标识
string myuserLoginId = userid + "_" + companyId + "_" + token;
if (userLoginId != myuserLoginId)
{
//两个用户标识不一样
filterContext.Result = new ContentResult()
{
Content = "<script>" +
"if(confirm('你的账号已在别处登陆,是否返回登陆页面?')){window.location.href='/Login/Index';}else{window.close();}</script>"
};
}
} base.OnActionExecuting(filterContext);
}
如果信息不一致,则说明在之后还有人登陆过该账号,则会弹出提示:

以上就是我做这个功能的思路以及部分代码。
用redis和cookie做单用户登录的更多相关文章
- Asp.NET WebApi+Redis实现单用户登录实战演练
一.课程介绍 本次分享课程属于<C#高级编程实战技能开发宝典课程系列>中的一部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集.整理和 ...
- Laravel 5.3 单用户登录的简单实现
需求 一个用户不能重复登录. 后登录者可以踢掉前者. 设计思路: 核心概念 用户ID: 是用户表主键 singleToken 算法: singleToken = md5(用户IP + 用户ID + 登 ...
- win2003设置单用户登录
远程桌面是windows操作系统中一个很方便的功能,管理测试机资产.异地排除故障等,都很快捷.在windows xp sp2模式下,一般默认是单用户登录,也就是当A用户远程一台机器时,B用户在远程到这 ...
- Django实现单用户登录
最近由于要毕业了写论文做毕设,然后还在实习发现已经好久都没有写博客了.今天由于工作需求,需要用Django实现单用户登录.大概意思就是跟QQ一样的效果,每个账号只能一个地方登录使用,限制账号的登录次数 ...
- 细讲前端设置cookie, 储存用户登录信息
细讲前端设置cookie 引言 正文 一.设置cookie 二.查看cookie 三.删除cookie 四.封装cookie操作 结束语 引言 我们都知道如果想做一个用户登录并使浏览器保存其登录信息, ...
- CentOS 单用户登录&命令行、图像界面
如何单用户登录: 这是一个很简单的问题,以前没重视,每次linux服务器无法正常启动时,都找应急盘,想偷懒,反而浪费了时间. 今天备忘如下: 1.系统启动时,按光标键调出GRUB引导菜单. 2.选定一 ...
- aps .net MVC单用户登录
当不允许多用户同时登录一个帐号时,就需要一种机制,当再登录一个相同的帐号时,前面登录的人被挤下线. 原文地址:http://www.cnblogs.com/f23wangj/p/4984302.htm ...
- ASP.NET MVC实现一个用户只能登录一次 单用户登录
现在许多网站都要求登录后才能进行进一步的操作,当不允许多用户同时登录一个帐号时,就需要一种机制,当再登录一个相同的帐号时,前面登录的人被挤下线,或者禁止后面的人登录.这里实现的是前一种功能. 网上有许 ...
- centos7 设置grub密码及单用户登录实例
centos7与centos6在设置grub密码的操作步骤上有很大的差别,特此记录供以后查用 grub加密的目的: 防止不法分子利用单用户模式修改root密码 给grub加密可以采用明文或者加密的密文 ...
随机推荐
- 关于hover与after,before已及first-letter,first-line的联用
0920自我总结 关于hover与after,before已及first-letter,first-line的联用 一.写法 元素:hover::after{样式} 元素:hover::before{ ...
- kvm2
kvm虚拟机的桥接网络 默认的虚拟机网络是NAT模式,网段192.168.122.0/24 1:创建桥接网卡 创建桥接网卡命令 virsh iface-bridge eth0 br0 取消桥接网卡命令 ...
- java简单实现用语音读txt文档
最近比较无聊,随便翻着博客,无意中看到了有的人用VBS读文本内容,也就是读几句中文,emmm,挺有趣的,实现也很简单,都不需要安装什么环境,直接新建txt文件,输入一些简单的vbs读文本的代码,然后将 ...
- Android 列表对话框 使用数组
添加一个数组 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceSt ...
- 个人项目开源之c++基于epoll实现高并发游戏盒子(服务端+客户端)源代码
正在陆续开源自己的一些项目 此为c++实现高并发的游戏盒子,平台问题需要迁移重构,所以有一些遗留问题,客户端异常断开没有处理,会导致服务器崩溃,还有基于快写代码编程平台实现的小程序切换,线程读写缓存没 ...
- ifconfig|grep eth0|awk '{print $5}' 命令详解
因需要将linx下获取某个网中的MAC地址,可以使用如下命令获取: ifconfig|grep eth0|awk '{print $5}' ifconfig: 输出linux下所有网口的信息(包括IP ...
- 华硕飞行堡垒_安装kali后N卡问题
问题来源: 因业务需要,最近打算安装kali linux操作系统,但是安装完成后开机过一会就会卡死,而且没办法进入用户的登录界面 问题分析: 笔记本电脑信息: 华硕飞行堡垒5 TUF GAMING ...
- 201871010105-曹玉中《面向对象程序设计(Java)》第一周学习总结
201871010105-曹玉中<面向对象程序设计(Java)>第一周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这 ...
- PHP读取文件和目录
1:目录列表 2:文件列表
- 添加Chrome插件时出现“程序包无效”等问题的解决办法
相较之各大浏览器,我最喜欢的便是Chrome了,不只因为Chrome搜索,也因为Google Chrome强大的插件功能. 而这一切的东风,就是"谷歌访问助手". 谷歌访问助手的下 ...