ASP.NET 基于Redis单点登录

 

Session介绍

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

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

 

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或者命令运行都行

   ASP.NET 基于Redis单点登录_第1张图片

 

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

 

 nuget中执行命令下载依赖

 install-package  Microsoft.Web.RedisSessionStateProvider  -version 2.2.6

 

然后WebApi中加入配置

ASP.NET 基于Redis单点登录_第2张图片

 

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

写入session

      public ActionResult Index()
        {
            ViewBag.msg = "访问的A站点" + DateTime.Now.ToString();

            //向session写入值
            Session["username"] = "hello" + DateTime.Now.ToString();

            return View();
        }

获取session

    public void GetSessionValue()
        {
            if (Session["username"] != null)
            {
                Response.Write("站点A访问session....................
");                 Response.Write("内容:" + Session["username"] + "
");                 Response.Write("SessionId:" + Session.SessionID);                 Response.End();             }         }

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

 

      public void GetSessionValue()
        {
            if (Session["username"] != null)
            {
                Response.Write("站点B访问session....................
"); Response.Write("内容:" + Session["username"] + "
"); Response.Write("SessionId:"+Session.SessionID); Response.End(); } else { Response.Write("session为空"); } }

然后运行测试

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

 

项目A获取

        

项目B获取

        

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

 

转载地址:http://www.tnblog.net/aojiancc2/article/details/210

 

 

 

 

你可能感兴趣的:(微服务,Asp.net)