用redis和cookie做单用户登录

时间:2023-02-24 15:17:17

因为公司的项目需要用到单用户登录,于是今天用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做单用户登录

以上就是我做这个功能的思路以及部分代码。

用redis和cookie做单用户登录的更多相关文章

  1. Asp&period;NET WebApi&plus;Redis实现单用户登录实战演练

    一.课程介绍 本次分享课程属于<C#高级编程实战技能开发宝典课程系列>中的一部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集.整理和 ...

  2. Laravel 5&period;3 单用户登录的简单实现

    需求 一个用户不能重复登录. 后登录者可以踢掉前者. 设计思路: 核心概念 用户ID: 是用户表主键 singleToken 算法: singleToken = md5(用户IP + 用户ID + 登 ...

  3. win2003设置单用户登录

    远程桌面是windows操作系统中一个很方便的功能,管理测试机资产.异地排除故障等,都很快捷.在windows xp sp2模式下,一般默认是单用户登录,也就是当A用户远程一台机器时,B用户在远程到这 ...

  4. Django实现单用户登录

    最近由于要毕业了写论文做毕设,然后还在实习发现已经好久都没有写博客了.今天由于工作需求,需要用Django实现单用户登录.大概意思就是跟QQ一样的效果,每个账号只能一个地方登录使用,限制账号的登录次数 ...

  5. 细讲前端设置cookie, 储存用户登录信息

    细讲前端设置cookie 引言 正文 一.设置cookie 二.查看cookie 三.删除cookie 四.封装cookie操作 结束语 引言 我们都知道如果想做一个用户登录并使浏览器保存其登录信息, ...

  6. CentOS 单用户登录&amp&semi;命令行、图像界面

    如何单用户登录: 这是一个很简单的问题,以前没重视,每次linux服务器无法正常启动时,都找应急盘,想偷懒,反而浪费了时间. 今天备忘如下: 1.系统启动时,按光标键调出GRUB引导菜单. 2.选定一 ...

  7. aps &period;net MVC单用户登录

    当不允许多用户同时登录一个帐号时,就需要一种机制,当再登录一个相同的帐号时,前面登录的人被挤下线. 原文地址:http://www.cnblogs.com/f23wangj/p/4984302.htm ...

  8. ASP&period;NET MVC实现一个用户只能登录一次 单用户登录

    现在许多网站都要求登录后才能进行进一步的操作,当不允许多用户同时登录一个帐号时,就需要一种机制,当再登录一个相同的帐号时,前面登录的人被挤下线,或者禁止后面的人登录.这里实现的是前一种功能. 网上有许 ...

  9. centos7 设置grub密码及单用户登录实例

    centos7与centos6在设置grub密码的操作步骤上有很大的差别,特此记录供以后查用 grub加密的目的: 防止不法分子利用单用户模式修改root密码 给grub加密可以采用明文或者加密的密文 ...

随机推荐

  1. PE Checksum Algorithm的较简实现

    这篇BLOG是我很早以前写的,因为现在搬移到CNBLOGS了,经过整理后重新发出来. 工作之前的几年一直都在搞计算机安全/病毒相关的东西(纯学习,不作恶),其中PE文件格式是必须知识.有些PE文件,比 ...

  2. 实验二 用C语言表示进程的调度

    实验二 一. 实验目的 通过模拟进程的调度,进一步了解进程的调度的具体过程. 二. 实验内容和要求 1.进程PCB的结构体定义 2.定义队列 3.输入进程序列 4.排序(按到位时间) 5.输出进程运行 ...

  3. c语言中各个类型的sizeof长度

    #include <stdio.h> int main() {     printf("\nA Char is %lu bytes", sizeof( char )); ...

  4. mount语法

    一.简单用法 $ mount /dev/hda2 /home第一个叁数是与包括文件系统的磁盘或分区相关的设备文件.第二个叁数是要mount到的目录. $ umount /dev/hda2$ umoun ...

  5. kaldi的TIMIT实例三

    ============================================================================ MMI + SGMM2 Training &a ...

  6. jenkins执行远程脚本注意的问题

    1构建任务 ->新建任务 2.填写任务名称    第二次构建可以复制第一次的配置 3.选择任务名称上面右键  选择配置 4.如下图所示 附录脚本内容 test.sh#!/bin/bash JAR ...

  7. js媒体查询设置根字号

    !function(n){var e=n.document,t=e.documentElement,i=750,d=i/50,o="orientationchange"in n?& ...

  8. 20155304田宜楠-第三次作业:虚拟机的安装与Linux学习

    安装VirtualBox虚拟机 安装VirtualBox虚拟机 这一步很简单,参考老师给的教程一步步安装,很快就完成了. 2.安装Ubuntu 这一步可是让我吃尽了苦头,我按照老师给的下载地址成功下载 ...

  9. Tensorflow中的transpose函数解析

    transpose函数作用是对矩阵进行转换操作 相信说完上面这一句,大家和我一样都是懵逼状态,完全不知道是怎么回事,那么接下来和我一起探讨吧 1.二维数组 x = [[1,3,5],  [2,4,6] ...

  10. hdu1085 Holding Bin-Laden Captive&excl;(母函数)

    简单的母函数应用. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstrin ...