Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET窗体和ASP.NET核心之间的共享会话_C#_Asp.net Core_Asp.net Session - Fatal编程技术网

C# ASP.NET窗体和ASP.NET核心之间的共享会话

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

我有一个使用RedisSessionProvider的现有ASP.NET表单web应用程序。 这是通过以下网络配置设置的

<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?