首页 > 其他分享 >net core实现分布式session,单点登录

net core实现分布式session,单点登录

时间:2022-11-03 10:03:53浏览次数:89  
标签:core Redis redis session net options

原文网址:http://m.tnblog.net/aojiancc2/article/details/2436

要想在net core中实现分布式session,实现单点登录,我们可以把session保存到redis中,这样就可以多个项目共享

session,因为redis集群什么的也很方便。

 

把session的值保存到redis中

怎么安装redis就不说了,首先要打开redis,然后就是net core中的操作了

 

1:nuget下载一个依赖Microsoft.Extensions.Caching.Redis

       Install-Package Microsoft.Extensions.Caching.Redis

 

2:在ConfigureServices配置一下让session保存到redis中

    //配置session保存到redis中
    services.AddDistributedRedisCache(options =>
    {
        //用于连接Redis的配置  Configuration.GetConnectionString("RedisConnectionString")读取配置信息的连接字符串
        options.Configuration = "localhost:6379";
        //Redis实例名DemoInstance
        options.InstanceName = "DemoInstance";
    });

    如果要接密码的话可以这样:192.168.1.105:6380,password=1qaz@WSX3edc$RFV

    还可以设置操作时间什么的:

public void ConfigureServices(IServiceCollection services)
{
    //将Redis分布式缓存服务添加到服务中
    services.AddDistributedRedisCache(options =>
    {
        options.ConfigurationOptions = new StackExchange.Redis.ConfigurationOptions()
        {
            Password = "我不是密码",
            ConnectTimeout = 5000,//设置建立连接到Redis服务器的超时时间为5000毫秒
            SyncTimeout = 5000,//设置对Redis服务器进行同步操作的超时时间为5000毫秒
            ResponseTimeout = 5000//设置对Redis服务器进行操作的响应超时时间为5000毫秒
        };

        options.ConfigurationOptions.EndPoints.Add("localhost:6379");
        options.InstanceName = "DemoInstance";
    });
    services.AddMvc();
}

 

 

3:在Configure中使用一下session的中间件

       

 

然后就可以正常的读写session了

 public IActionResult Index()
        {
            string val = HttpContext.Session.GetString("test_username");
            //session为空写入一条测试数据
            if (string.IsNullOrEmpty(val))
            {
                HttpContext.Session.SetString("test_username", "a");
            }

            ViewBag.sessionid = HttpContext.Session.Id;
            ViewBag.val = val;
            return View();
        }

然后居然报错了....自己测试的时候好好的,撸文章的时候居然报错了!简直可怕

哦.....太着急了第二步中应该还有一个使用session的配置忘记写了

//添加session
services.AddSession(options =>
{
     options.IdleTimeout = TimeSpan.FromMinutes(10); //session活期时间
     options.Cookie.HttpOnly = true;//设为httponly
});

然后就成功了!在redis中可以看到session添加的数据!

当然数据是被编码了的,net core中有专门的数据保护模块是真的比较好用!

 

然后打开另外一个项目,重复上诉的步骤,因为session可以实现分布式扩项目访问

but其实并不行,A项目写入了session,B项目还是无法访问,于是就想这两个项目是不是有关联才行了,

从这个思路入手

 

实现分布式session跨项目访问

    在原来framework中,session存储在redis中就可以直接实现单点登录了,但是在net core还不行,经常查询发现是因为

net core中的数据保护问题。

    对于普通开发人员在编码的时候可能不会用到,但是在做系统分布式部署的时候如果你不了解这个机制可能就会遇到麻烦了 

比如MachineKey:机器钥匙

    或者我们去实现IXmlRepository接口,有兴趣的可以去研究一下

  

  当然这里实现分布式session不需要那么复杂,我们只需要把需要共享session的项目设置相同的程序识别者就好了

  

  估计设置成相同的程序识别者,net core才会认为是拥有访问那个session的权限吧,因为数据是加密的,他们也需要有相同的秘钥

   

  然后看看最后的效果

  

    项目A写入后读取,项目B直接读取,可以看到session和值和sessionid都一样,分布式session成功!上班!,羽毛球可以约一波

     

      

 

最后贴一个在原来framework下的单点登录实现:http://www.tnblog.net/aojiancc2/article/details/210

 

标签:core,Redis,redis,session,net,options
From: https://www.cnblogs.com/bruce1992/p/16853436.html

相关文章

  • WEB、Internet、WAN、LAN
    WEBWEB(WorldWideWeb)即全球广域网,也称为万维网,它是一种基于超文本和HTTP协议的、全球性的、动态交互的、跨平台的分布式图形信息系统。是建立在Internet上的一种网络服务......
  • 编译yolov4 darknet遇到的错误记录
    1、从github上面下载了一份代码https://github.com/Sparkling-Water/yolo_darknet2、编译出现了类似这样的错误undefinedreferenceto`std::__cxx11::basic_string<char......
  • Netch安装使用
    介绍Netch是一款Windows平台的开源游戏加速工具,和SSTap一样可以使用全局代理加速游戏。不同的是Netch软件目前仍在维护更新中。这里我们用到Netch的全局代理功能,......
  • tensorflow1.x——如何在python多线程中调用同一个session会话
    如何在python多线程中调用同一个session会话? 这个问题源于我在看的一个强化学习代码:https://gitee.com/devilmaycry812839668/scalable_agent 在众多的机器学习的分......
  • tensorflow1.x——如何在C++多线程中调用同一个session会话
    相关内容:tensorflow1.x——如何在python多线程中调用同一个session会话 =================================================......
  • 【THM】Net Sec Challenge-练习
    本文相关的TryHackMe实验房间链接:https://tryhackme.com/room/netsecchallenge使用此挑战来测试你的技能掌握程度,此挑战中的所有问题都可以仅使用nmap、telnet和hydra来解......
  • Netty+WebSocket 获取火,币交易所数据项目
    先附上项目项目GitHub地址 spring-boot-netty-websocket-huobi项目简介本项目使用 SpringBoot+Netty来开发WebSocket服务器,与火币交易所Websocket建立连接,时时获取火......
  • Kubernetes StatefulSet 实操整理
    StatefulSetStatefulSet用来管理有状态应用的工作负载API对象。和Deployment类似,StatefulSet管理基于相同容器规约的一组Pod。但和Deployment不同的是,Statefu......
  • 论文笔记 - RETRIEVE: Coreset Selection for Efficient and Robust Semi-Supervised
    Motivation虽然半监督学习减少了大量数据标注的成本,但是对计算资源的要求依然很高(无论是在训练中还是超参搜索过程中),因此提出想法:由于计算量主要集中在大量未标注的数据上......
  • Week5-Technology: Internets and Packets
    Week5-Technology:InternetsandPacketsCommonLinkLayertechnologiesare…WiFiOpticalSatelliteEthernetCableModemDSL**Whenlookingataddressesf......