4

我有一个使用 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 分享这个。我只需添加引用并将上述内容添加到他们的 WebConfig 中,就可以与其他 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 站点的情况下,我尝试做的事情是否可行?如果只有在我修改主机时才有可能(将来必须如此),我必须在那里做什么?

4

0 回答 0