用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加密可以采用明文或者加密的密文 ...
随机推荐
- Unix 开发中的 Make 三连
Unix 开发过程中,经常性的操作是从源码编译安装相应库文件,所以下面三个命令便是家常便饭,俗称三连: ./configure make make install 下面来看看这三步分别做了什么. co ...
- JS基础语法---Date对象---格式化日期
格式化后的指定格式的日期和时间,封装一个函数 function getDate() { var dt = new Date(); var year = dt.getFullYear(); var mo ...
- wireshark和tcpdump抓包TCP乱序和重传怎么办?PCAP TCP排序工具分享
点击上方↑↑↑蓝字[协议分析与还原]关注我们 " 介绍TCP排序方法,分享一个Windows版的TCP排序工具." 在分析协议的过程中,不可避免地需要抓包. 无论抓包条件如何优越, ...
- arcgis api 4.x for js 基础工具篇之测距测面
前言 在搭建好WebGIS应用框架的时候,相信大家首先开发的都会是基础功能,此篇文章我们主要讲述的是“测距”."测面"功能. 注* 在测量单位中常规都是基于"平面坐标系& ...
- SharePoint PowerShell 创建网站栏
前言 最近,有这么个需求,需要使用PowerShell为网站集创建网站栏,好吧,直接看代码吧. Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorA ...
- U盘的几种分类及格式
u盘常见的几种分类: 1.按u盘材质来分,可以分为金属u盘.塑料u盘.软胶u盘.皮革u盘.木质u盘.珠宝u盘等.这些主要是考虑u盘本身外壳所用材质的. 2.从u盘容量来分,就是8GB.16GB.32G ...
- mysql忧化参数
转自 https://blog.51cto.com/tongcheng/1710265以下参数是在mysql-5.6.27中使用,可能mysql版本不同使用方法不一样1.线程参数innodb_read ...
- tomcat的一些优化及报错
以下为转发来,具体地址为 http://blog.csdn.net/chen3888015/article/details/7432488 环境centos5.7 tomcat6 http://apr ...
- Python爬虫(requests模块)
Requests是唯一的一个非转基因的Python HTTP库,人类可以安全享用. Requests基础学习 使用方法: 1.导入Requests模块: import requests 2.尝试用g ...
- MongoDB学习笔记(二、MongoDB查询)
目录: MongoDB数据类型 MongoDB新增语法 MongoDB查询语法 MongoDB查询选择器 MongoDB关联查询 MongoDB数据类型: MongoDB新增语法: 语法:db.col ...