在ASP.NET Forms和ASP.NET Core之间共享会话

时间:2018-05-21 14:24:13

标签: c# asp.net-core asp.net-session

我有一个使用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站点的情况下,我正在尝试做什么? 如果只有我修改了主机(将来必须是这样),我还能做什么?

0 个答案:

没有答案