使用Redis缓存作为会话存储asp.net核心



尝试在已经存在的Web应用程序中使用Redis Cache作为会话存储,该应用程序是在asp.net mvc核心(2.1.1(中开发的。

是指https://garywoodfine.com/redis-inmemory-cache-asp-net-mvc-core/

以及https://joonasw.net/view/redis-cache-session-store但是当尝试在Redis Desktop Manager中检查会话集/获取值时,没有显示任何内容。

是否需要其他步骤使会话存储使用Redis缓存,而不是默认的内存中(in proc(选项?

启动.cs

public void ConfigureServices(IServiceCollection services)
{
services.AddDistributedRedisCache(options =>
{
options.InstanceName = Configuration.GetValue<string> 
("redis:name");
options.Configuration = Configuration.GetValue<string> 
("redis:host");
});
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddSessionStateTempDataProvider();
services.AddSingleton<IDistributedCache, RedisCache>();
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(60);
});
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseSession();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Login}/{action=Login}/{id?}");
});
}
}

应用程序设置

"redis": {
"host": "127.0.0.1",
"port": 6379,
"name": "localhost"
},

使用的Nuget包

Microsoft.Extension.Caching.RRedis 2.1.1

行动方法中的样本使用

var storedValue = "Redis TimeStamp : " + DateTime.Now.ToString("s");
HttpContext.Session.SetString("TestValue", storedValue);
HttpContext.Session.CommitAsync();

感谢在这方面的任何指示或方向。

TIA-

检查此项:

//Shared Session in RedisCache
using StackExchange.Redis;
using Microsoft.AspNetCore.DataProtection;
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddDataProtection()
.SetApplicationName("vextus")
.PersistKeysToRedis(ConnectionMultiplexer.Connect(Configuration.GetConnectionString("RedisConnection")),
"DataProtection-Keys");

services.AddDistributedRedisCache(o =>
{
o.Configuration = Configuration.GetConnectionString("RedisConnection");
});
services.AddSession(o =>
{
o.Cookie.Name = "vextus";
o.Cookie.SameSite = SameSiteMode.None;
o.Cookie.HttpOnly = true;
o.IdleTimeout = TimeSpan.FromMinutes(10);
});
}

最新更新