应无所住,而生其心
排名
1
文章
870
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

ASP.NET 使用Redis实现单点登录

7954人阅读 2019/1/9 22:22 总访问:5407463 评论:2 收藏:1 手机
分类: .NET


Session介绍


    session是用来记录客户端用户信息的,在客户端第一次向服务器发起请求的时候服务器会生成一个sessionid并返回。

    客户端接收到seesion存放到cookie中,下次在请求的时候会携带sessionid用于区别不同的客户端。

    所以cookie禁用掉,session也有失效。



Asp.Net中Session的存储模式


       1:InProc,Session存储在进程内,默认值

  2:  StateServer,Session存储在独立的状态服务即ASP.NET State Service中

       3:SQLServer,Session存储在SQL Server数据库中

       4:Custom,自定义保存方式,可以保存在MySql、MongoDb、Redis等



Session存入Redis实现单点登录基本原理


    一般我们使用session都是使用的默认的模式就是把session存储在进程内,这个时候如果有用户登录,就向session中取出写入一个数据,然后我们就可以根据这个数据是否存在来判断用户是否登录了,但这种方式无法实现系统A登录了,系统B登录,因为不同的系统session都不一样。所以我们可以把session写入到redis中,然后不同的系统都去取那个redis中的session就可以取出一致的session从而实现单点登录了



先启动Redis


    官网直接下载就好了,双击exe或者命令运行都行

    


 然后创建两个项目,两个项目都加入相关依赖如配置


nuget中执行命令下载依赖

 install-package  Microsoft.Web.RedisSessionStateProvider  -version 2.2.6



然后WebApi中加入配置



项目A创建一个写入session的与或者session的方法

写入session

  1.       public ActionResult Index()
  2.         {
  3.             ViewBag.msg = "访问的A站点" + DateTime.Now.ToString();
  4.  
  5.             //向session写入值
  6.             Session["username"] = "hello" + DateTime.Now.ToString();
  7.  
  8.             return View();
  9.         }


获取session

  1.     public void GetSessionValue()
  2.         {
  3.             if (Session["username"] != null)
  4.             {
  5.                 Response.Write("站点A访问session....................<br/>");
  6.                 Response.Write("内容:" + Session["username"] + "<br/>");
  7.                 Response.Write("SessionId:" + Session.SessionID);
  8.                 Response.End();
  9.             }
  10.         }


项目B就创建一个获取session的方法

  1.       public void GetSessionValue()
  2.         {
  3.             if (Session["username"] != null)
  4.             {
  5.                 Response.Write("站点B访问session....................<br/>");
  6.                 Response.Write("内容:" + Session["username"] + "<br/>");
  7.                 Response.Write("SessionId:"+Session.SessionID);
  8.                 Response.End();
  9.             }
  10.             else
  11.             {
  12.                 Response.Write("session为空");
  13.             }
  14.         }



然后运行测试

先运行项目A写入,然后项目A与项目B都去获取一下session


项目A获取session



项目B获取session

可以看到,虽然项目B没有去写入session但是获取的session却与站点A完全一致从而可以实现跨项目单点登录


tip:这里可以看到两个项目的sessionid都一样,为什么会这样呢?我估计是第一个项目访问的时候分配了sessionid,然后存储到了redis把,

第二个项目访问的时候分配的sessionid就直接从redis中去取了,从而实现能取到值





欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

Ria

2019/1/18 18:07:42

听说可以评论了,但是老大,还不能发图。。。刚把得

剑轩:@Ria干巴得!

2019/1/22 9:22:51 回复

BadRequestObjectResult writing value of type 'Microsoft.ASPnetcore.Mvc.ValidationProblemDetails'。net core获取参数验证的错误。找到实体验证的错误

net core获取参数验证的错误,这样写就可以了: services.Configure&lt;ApiBehaviorOptions&gt;(options =&gt; { opt...

dotnet-5.0.17 运行时,与ASPnetcore-5.0.17 运行时下载。ASPnetcore-runtime-5.0.17-win-x64。dotnet-runtime-5.0.17-win-x64。

https://dotnet.microsoft.com/zh-cn/download/dotnet/thank-you/runtime-aspnetcore-5.0.17-windows-x64-installer?cid=g...

net core 使用 EF Code First

下面这些内容很老了看这篇:https://www.tnblog.net/aojiancc2/article/details/5365 项目使用多层,把数据库访问...

使用OLEDB读取不同版本Excel的连接字符串设置

使用OleBD读取excel的时候,excel不同的版本,连接字符串的写法也会不一样。///&lt;summary&gt; ///读取excel ///&lt;/su...

C 使用CancellationTokenSource取消多线程

有时间我们在使用多线程的时候,需要取消线程的执行,可以使用CancellationTokenSource来取消对Task开辟多线程的取消如下:...

使用爬虫刷csdn博客访问量

首先了解一下常见反爬虫的检测方法频率监测:有些网站会设置一种频率监测的机制,对于同一IP,若在一定时间内访问的速度超...

Idea下使用maven搭建SSM(一):SpringMVC

Spring MVC是一款基于MVC架构模式的轻量级Web框架,其目的是将Web开发模块化,对整体架构进行解耦,简化Web开发流程。下面...

Idea下使用maven搭建SSM(二):MyBatis

开发Web应用,数据的存储和处理往往离不开数据库和SQL语句。在使用Java开发的Web应用中,自然也少不了连接数据库的步骤。在...

使用 微软自带语音合成类库

//引入语音合成名称空间 usingSystem.Speech.Synthesis; classA { voidtest1() { //实例化并指定字符串播放合成读音 ...

如何使用图标像使用文字一样,使用文本图标的方法

1.首先在Iconfont-阿里巴巴矢量图标库上面找到你需要的图标然后加入你的购物车然后选择图标;注意:每个类型的图标会大小不...

使用七牛云的cdn服务,提高图片的加载速度

CDN介绍CDN的全称是Content Delivery Network,即内容分发网络。CDN加速主要是加速静态资源,如网站上面上传的图片、媒体,...

.net core 使用session

tip:net core 2.2后可以直接启用session了,不用在自己添加一次session依赖,本身就添加了使用nuget添加引用Microsoft.AspN...

使用OutLook发送邮件

publicstaticvoidOutlook(stringSubject,stringTextBody,stringFromAdd,stringFromPass,stringTo,stringCC,List&lt;string&...

SQL Server 中使用游标

--声明一个游标 DECLAREMyCursorCURSOR FORSELECTTOP5FBookName,FBookCodingFROMTBookInfo//定义一个叫MyCursor的游标,...

Windows使用wireshark抓包小心得

wireshrak是个网络抓包工具,常用。但是在数据较大的网络环境中直接使用软件抓包会导致wireshark卡死。为什么呢 ?网卡瞬间...

Oracle自定义函数的简单使用

一.最最最简单的返回一个数字的函数createorreplacefunctionfun_show returnint--申明返回值 as begin return1; end;...