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

时间:2023-03-08 17:45:14

安装Microsoft.Extensions.Caching.Redis.Core

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

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

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是否入库。

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

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

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

网上找了一下

. 先打开命令行cmd
. 运行chcp
. 在命令行标题栏上点击右键,选择"属性"->"字体",将字体修改为True Type字体"Lucida Console",然后点击确定
. 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