• 首先准备redis服务器(docker 和redis3.0内置的哨兵进行高可用设置)
  • 网站配置Redis作为存储session的介质(配置文件这些略)。然后可以了解一下MachineKey这个东西.(MachineKey是用来生成session和解密session的一个xml格式对象)
  • 生成MachineKey
    再startup  config里面配置如下代码
    //抽取key-xxxxx.xml
    services.AddDataProtection().PersistKeysToFileSystem(new DirectoryInfo(@"D:\"));
    然后再对应的磁盘路径上面找到格式后缀为xml的文件
  • 将文件用记事本打开,然后新增一个类来替换网站默认使用的MachineKey。
    using Microsoft.AspNetCore.DataProtection.Repositories;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Xml.Linq; namespace Session02
    {
    public class CustomXmlRepository : IXmlRepository
    {
    /// <summary>
    /// 设置MachineKey这里的内容就是复制出xml文件的内容
    /// </summary>
    private readonly string keyContent =
    @"<?xml version='1.0' encoding='utf-8'?>
    <key id='6e0d77ae-807d-4dd5-9b33-1f364f6c1f3e' version='1'>
    <creationDate>2018-07-25T07:01:39.5356164Z</creationDate>
    <activationDate>2018-07-25T07:01:39.4800644Z</activationDate>
    <expirationDate>2018-10-23T07:01:39.4800644Z</expirationDate>
    <descriptor deserializerType='Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel.AuthenticatedEncryptorDescriptorDeserializer, Microsoft.AspNetCore.DataProtection, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'>
    <descriptor>
    <encryption algorithm='AES_256_CBC' />
    <validation algorithm='HMACSHA256' />
    <masterKey p4:requiresEncryption='true' xmlns:p4='http://schemas.asp.net/2015/03/dataProtection'>
    <!-- Warning: the key below is in an unencrypted form. -->
    <value>lPUxFutB30oi1KU990Y5nKxeCBnHg7h1JX26nvDlpxdbYciXQr2gdUpLxrL52O/vg8Htrr9F3Xf2fqnVhhAjhw==</value>
    </masterKey>
    </descriptor>
    </descriptor>
    </key>"; public virtual IReadOnlyCollection<XElement> GetAllElements()
    {
    return GetAllElementsCore().ToList().AsReadOnly();
    } private IEnumerable<XElement> GetAllElementsCore()
    {
    yield return XElement.Parse(keyContent);
    }
    public virtual void StoreElement(XElement element, string friendlyName)
    {
    if (element == null)
    {
    throw new ArgumentNullException(nameof(element));
    }
    StoreElementCore(element, friendlyName);
    } private void StoreElementCore(XElement element, string filename)
    {
    }
    }
    }
  • 在startup里面注入CustomXmlRepository使用默认的key来生成session
    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.DataProtection.Repositories;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.DependencyInjection; namespace Session02
    {
    public class Startup
    {
    public Startup(IConfiguration configuration)
    {
    Configuration = configuration;
    } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
    //抽取key-xxxxx.xml
    //services.AddDataProtection().PersistKeysToFileSystem(new DirectoryInfo(@"D:\"));
    services.AddSingleton<IXmlRepository, CustomXmlRepository>();
    services.AddDataProtection(configure =>
    {
    configure.ApplicationDiscriminator = "Seesion.testweb";
    });
    services.AddDistributedRedisCache(option =>
    {
    //redis 数据库连接字符串
    option.Configuration = Configuration.GetConnectionString("RedisConnection");
    //redis 实例名
    option.InstanceName = "test";
    });
    services.AddSession();
    services.AddMvc();
    } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
    if (env.IsDevelopment())
    {
    app.UseDeveloperExceptionPage();
    }
    app.UseSession();
    app.UseMvc();
    }
    }
    }
  • 多个网站都用以上方法进行配置,然后测试一波

netcore 使用redis session 分布式共享的更多相关文章

  1. nginx+iis+redis+Task.MainForm构建分布式架构 之 (redis存储分布式共享的session及共享session运作流程)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,上一篇分享文章制作是在windows上使用的nginx,一般正式发布的时候是在linux来配 ...

  2. Session分布式共享 = Session + Redis + Nginx

    一.Session 1.Session 介绍 我相信,搞Web开发的对Session一定再熟悉不过了,所以我就简单的介绍一下. Session:在计算机中,尤其是在网络应用中,称为"会话控制 ...

  3. Session分布式共享 = Session + Redis + Nginx(转)

    出处:http://www.cnblogs.com/newP/p/6518918.html 一.Session 1.Session 介绍 我相信,搞Web开发的对Session一定再熟悉不过了,所以我 ...

  4. 详解Session分布式共享(.NET CORE版)

    一.前言&回顾 在上篇文章Session分布式共享 = Session + Redis + Nginx中,好多同学留言问了我好多问题,其中印象深刻的有:nginx挂了怎么办?采用Redis的S ...

  5. 什么是Session分布式共享

    在了解session分布式共享之前先来了解Session.Redis和Nginx的相关知识. 一.Session相关知识 1.Session 介绍 Session在网络应用中,称为“会话控制”. 每个 ...

  6. asp.net session分布式共享解决方案

    Session共享是分布式系统设计时必须考虑的一个重要的点.相比较java中的session共享解决方案,.net中的解决方案还是比较少,MemcachedSessionProvider类库是比较优秀 ...

  7. 【Redis】分布式Session

    一.问题引出 1.1 Session的原理 1.2 问题概述 二.解决方案 三.代码实现-使用Token代替Session 3.1 Service 3.2 TokenController 一.问题引出 ...

  8. EhCache+Redis实现分布式缓存

    Ehcache集群模式 由于 EhCache 是进程中的缓存系统,一旦将应用部署在集群环境中,每一个节点维护各自的缓存数据,当某个节点对缓存数据进行更新,这些更新的数据无法在其它节点中共享,这不仅会降 ...

  9. 使用Spring Session和Redis解决分布式Session跨域共享问题

    http://blog.csdn.net/xlgen157387/article/details/57406162 使用Spring Session和Redis解决分布式Session跨域共享问题

随机推荐

  1. Educational Codeforces Round 77 比赛总结

    比赛情况 我太菜了 A题 加减乘除不会 B题 二元一次方程不会 C题 gcd不会 就会一个D题二分答案大水题,本来想比赛最后一分钟来一个绝杀,结果 Wrong Answer on test 4 比赛总 ...

  2. MySQL不常用、易忽略的小知识

    笔者从事开发也有一段时间了,关于数据库方面的一些小知识在这里总结一下 1.count(*),count(1)与count(column)区别 count(*)对行的数目进行计算,包含NULL coun ...

  3. C#对应JavaScript的银行家舍入规则(Math.Round()对应toFixed(f))

    Math.Round((n * u - t * u )/ u, f);//这里使用银行家四舍五入对应JS的 toFixed() ((n * u - t * u) / u).toFixed(f) f为小 ...

  4. C# 、Java数组申明、初始化区别

    一.数组申明   int[] a1 int a2[] C# 支持 不支持 Java 支持 支持 二.数组申明且初始化    int[] a1 = new int[] { 2, 31 } int a1[ ...

  5. clojure的语法糖

    语法糖很多, 就是奔这个“懒” 来用clj的. 但是,在常见的书里(<Clojure编程><Clojure编程乐趣2>)都对很多基本语法,用法都介绍不全, 不细.看书看得很累. ...

  6. 2019hdu多校 K-th Closest Distance

    题目链接:Click here 大致题意:q次询问,每次询问你区间[L,R]中|p-ai|的值第k小的是多少 Solution: 直接找是很困难的,我们考虑二分答案,那么本题就十分简单了 我们对权值维 ...

  7. [CF118D]Caesar's Legions 题解

    题意简述 一个01序列由\(n_1\)个0和\(n_2\)个1组成,求最长连续0串长度不超过\(k_1\),最长连续1串长度不超过\(k_2\)的序列的方案总数 题解 状态 方案总数 变量 已经取了i ...

  8. smooth L1损失函数

    当预测值与目标值相差很大时,L2 Loss的梯度为(x-t),容易产生梯度爆炸,L1 Loss的梯度为常数,通过使用Smooth L1 Loss,在预测值与目标值相差较大时,由L2 Loss转为L1  ...

  9. linux xz压缩解压

    1. 解压 xz 格式文件 方法一: 需要用到两步命令,首先利用 xz-utils 的 xz 命令将 linux-3.12.tar.xz 解压为 linux-3.12.tar,其次用 tar 命令将 ...

  10. sass scss less 的编译工具 koala

    使用 koala 时注意事项: 1.目录中一定不能出现中文,否则就会报错 2.文件中如果出现中文(!注释也算) 开头一定要加   @charset "utf-8"; 否则就会出现无 ...