我有一个使用RedisSessionProvider的现有ASP.NET Forms Web应用程序。 这只是通过WebConfig设置,具有以下内容。
<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 Core SubSite / SubApplication分享这个。 我可以通过添加引用并将上面的内容添加到他们的WebConfigs中,与其他ASP.NET(MVC / Forms)子网站共享它。
但是,对于.NET Core,我无法弄清楚如何共享它。请记住,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();
}
我已将app.UseSession()添加到public void Configure(...)。
这会将cookie重命名为与主机站点相同,但它不允许我访问同一个会话存储。 我猜这与在.NET核心与ASP.NET中加密cookie的方式有关。
在不修改Host .NET Forms站点的情况下,我正在尝试做什么? 如果只有我修改了主机(将来必须是这样),我还能做什么?