C# ASP.NET窗体和ASP.NET核心之间的共享会话
我有一个使用RedisSessionProvider的现有ASP.NET表单web应用程序。 这是通过以下网络配置设置的C# ASP.NET窗体和ASP.NET核心之间的共享会话,c#,asp.net-core,asp.net-session,C#,Asp.net Core,Asp.net Session,我有一个使用RedisSessionProvider的现有ASP.NET表单web应用程序。 这是通过以下网络配置设置的 <sessionState mode="Custom" customProvider="RedisSessionProvider"> <providers> <add name="RedisSessionProvider" applicationName="myApp" type="Microsoft.Web.Redis.RedisS
<sessionState mode="Custom" customProvider="RedisSessionProvider">
<providers>
<add name="RedisSessionProvider" applicationName="myApp" type="Microsoft.Web.Redis.RedisSessionStateProvider" connectionString="RedisConnection" ssl="true" />
</providers>
</sessionState>
<connectionStrings>
<add name="RedisConnection" connectionString="host:port,password=myPassword,ssl=True,abortConnect=False"/></connectionStrings>
我想与ASP.NET核心子网站/子应用程序共享此信息。
我可以与其他ASP.NET(MVC/Forms)子网站很好地共享它,只需添加引用并将上述内容添加到他们的网络配置中即可
然而,对于.NETCore,我不知道如何共享它。请记住,ASP.NET表单站点的代码已冻结3个月,因此我们无法对其进行任何更改
在ASP.NET Core应用程序中,我引用了Microsoft.AspNetCore.DataProtection和StackExchange.Redis。
并在Startup.cs中包含以下代码
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddSingleton<IConfiguration>(Configuration);
string redisConnectionString = Configuration.GetValue<string>("Redis:ConnectionString");
string redisKey = Configuration.GetValue<string>("Redis:Key");
var redis = ConnectionMultiplexer.Connect(redisConnectionString);
services.AddDataProtection().PersistKeysToRedis(redis, redisKey).SetApplicationName("myApp");
services.AddAuthentication("Identity.Application").AddCookie("Identity.Application",
options =>
{
options.Cookie.Name = "ASP.NET_SessionId";
});
services.AddSession(options =>
{
options.Cookie.Name = "ASP.NET_SessionId";
});
services.AddOptions();
}
public void配置服务(IServiceCollection服务)
{
services.AddMvc();
services.AddSingleton(配置);
string redisConnectionString=Configuration.GetValue(“Redis:ConnectionString”);
字符串redisKey=Configuration.GetValue(“Redis:Key”);
var redis=ConnectionMultiplexer.Connect(redisConnectionString);
services.AddDataProtection();
services.AddAuthentication(“Identity.Application”).AddCookie(“Identity.Application”,
选项=>
{
options.Cookie.Name=“ASP.NET\u SessionId”;
});
services.AddSession(选项=>
{
options.Cookie.Name=“ASP.NET\u SessionId”;
});
services.AddOptions();
}
我已经将app.UseSession()添加到public void Configure(…)
这会将cookie重命名为与主机站点相同的名称,但不会授予我访问同一会话存储的权限。
我猜这与在.NETCore和ASP.NET中加密cookie的方式有关
在不修改宿主.NET表单站点的情况下,我尝试做的事情是否可行?
如果只有在我修改主机(将来必须修改)时才有可能,那么我必须在那里做什么?为什么需要这样做?这似乎是一个可怕的问题idea@trailmax为什么我需要共享会话?因为宿主站点在所有子站点中存储我需要访问的信息。此外,登录体验需要在主机下的所有站点之间无缝连接。有比共享ASP.Net会话更好的方法在(微型)站点之间共享数据,包括单次登录。@trailmax是的,很遗憾,我没有能力修改主机站点,需要在其当前设置的范围内工作,不幸的是,这意味着我需要访问存储在会话中的信息。@Hendel共享Redis和共享会话cookie是两件不同的事情。只要密钥相同,ASP.NET内核就可以从Redis读取数据。为什么需要从ASP.NET Core访问Web表单会话Cookie?