把旧系统迁移到.Net Core 2.0 日记 (15) --Session 改用Redis

蓝咒 提交于 2020-12-19 18:08:47

安装Microsoft.Extensions.Caching.Redis.Core

       NuGet中搜索Microsoft.Extensions.Caching.Redis.Core并安装,此NuGet包是对Caching的拓展,即可以更换Caching存储介质

image

appsettings.json配置Redis连接字符串

       appsettings.json配置Redis连接字符串(相当于web.config里面配置appsetting节点),注意:添加位置要在Logging上面

{ "ConnectionStrings": { 
    "RedisConnection": "127.0.0.1:6379,password=xxxxxxxxx"
  },
"Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  }
}

 

Startup.cs的ConfigureServices方法中添加引用

public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddMvc();
            services.AddDistributedRedisCache(option =>
            {       
                   //redis 数据库连接字符串
                   option.Configuration = Configuration.GetConnectionString("RedisConnection");
                   //redis 实例名
                   option.InstanceName = "master";
              });
              services.AddSession();


          }

 页面运行HttpContext.Session.GetString("key"),然后用Redis管理工具RedisDesktopManager查询Session是否入库。

 

每个客户端 InstanceName+ Guid (这个不是session的ID), 数据存储在Hash类型里的data, 不能在调试模式访问. 

hash的data是16进制的字符串,不是中文,怎么显示呢?

网上找了一下

1. 先打开命令行cmd
2. 运行chcp 65001
3.  在命令行标题栏上点击右键,选择"属性"->"字体",将字体修改为True Type字体"Lucida Console",然后点击确定
4. redis-cli.exe -a password --raw

但是对于hash里的data还是没有用

 hash里sldexp 应该是过期时间,默认是20分钟, 但这个值是微秒吗? 好像多了个零. 因为20*60*1000*1000= 1200,000,000

 

当有多台机器Web server的时候,session不会同步。

 

session其实是根据cookie的一个值来取的,而这个值得不同是因为.net core对其做了数据保护(data Protection) 

数据保护会调用机器自身的一个key值,该key值每台机器都不一样,因此最终造成cookie的值也不一样

 

为了解决这个问题。.Net Core团队提供了包将秘钥保存到redis中

添加包引用Microsoft.AspNetCore.DataProtection.Redis


修改startup文件如下

var redis = ConnectionMultiplexer.Connect("192.168.1.132:6379");
            services.AddDataProtection()
                .SetApplicationName("session_application_name")
                .PersistKeysToRedis(redis, "DataProtection-Keys");
            services.AddDistributedRedisCache(option =>
            {
                //redis 数据库连接字符串
                option.Configuration = "192.168.1.132:6379";
                //redis 实例名
                option.InstanceName = "master";
            });
            services.AddSession();

 

 

把旧系统迁移到.Net Core 2.0 日记 (15) --Session 改用Redis
 把旧系统迁移到.Net Core 2.0 日记 (13) --图形验证码
把旧系统迁移到.Net Core 2.0 日记 (12) --发布遇到的问题
把旧系统迁移到.Net Core 2.0 日记(11) -- Authentication 认证 claimsIdentity 对比 之前的FormAuthentication
把旧系统迁移到.Net Core 2.0 日记(10) -- EF core 和之前版本多对多映射区别
把旧系统迁移到.Net Core 2.0 日记(9) -- T4 Template
把旧系统迁移到.Net Core 2.0 日记(8) - EASYUI datagrid
把旧系统迁移到.Net Core 2.0 日记(7) Tag Helpers /ResponseCache
把旧系统迁移到.Net Core 2.0 日记(6) MapRoute/Area/ViewPath

 

把旧系统迁移到.Net Core 2.0 日记(5) Razor/HtmlHelper/资源文件
把旧系统迁移到.Net Core 2.0 日记(4) - 使用EF+Mysql
把旧系统迁移到.Net Core 2.0 日记(3) - 详解依赖注入
把旧系统迁移到.Net Core 2.0 日记(2) - 依赖注入/日志NLog

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!