无法同时连接 IIS 中共享相同 sessionid 的多个网站

Multiple websites in IIS sharing same sessionids can´t be connected at same time

我要在 IIS 中添加两个网站。代码相同,但文件不同。问题是当您登录第一个并登录第二个时,您尝试在第一个上做一些事情,看起来会话已被清除并再次显示主页。两者都使用相同的会话变量。我也在使用 JwtBearer。
如何同时使用两个网站?

Startup.cs:

 services.AddSession(options =>
  {
      options.IdleTimeout = TimeSpan.FromMinutes(300);
      options.Cookie.HttpOnly = true;
  });
    
  services.AddAuthentication(options =>   {
      options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
      options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;    })
      .AddIdentityServerJwt()
      .AddJwtBearer(x =>
        {
            x.RequireHttpsMetadata = false;
            x.SaveToken = true;
            x.TokenValidationParameters = new TokenValidationParameters
            {
               ValidateIssuerSigningKey = true,
               IssuerSigningKey = new SymmetricSecurityKey(key),
               ValidateIssuer = false,
               ValidateAudience = false,
               ValidateLifetime = true,       
             }; });

我正在使用会话:

 IHttpContextAccessor.HttpContext.Session;

您正在使用 cookie 进行会话识别。浏览器根据 url 部分向请求添加 cookie。如果您在 url 中使用相同的服务器并且主机名相同,那么在此用例中路径部分应该不同。 这种差异也应该在 cookie 上设置,因为它们的默认路径是空的。因此,如果您的两个站点仅路径不同但使用相同的主机名,则默认 cookie 路径不允许浏览器区分。

尝试将 options.Cookie.Path 设置为您网站的适当根目录。

2。 如果您发现您的会话在两个站点之间共享,那么您还有另一个问题:这两个站点是否共享相同的执行环境 (apppool)?您是否仅在 IIS 下创建了一个站点并将其下的两个应用程序放在不同的文件夹中?这不会在应用程序之间创建适当的分隔。创建两个应用程序池并将它们分配给两个应用程序。