无法同时连接 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 下创建了一个站点并将其下的两个应用程序放在不同的文件夹中?这不会在应用程序之间创建适当的分隔。创建两个应用程序池并将它们分配给两个应用程序。
我要在 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 下创建了一个站点并将其下的两个应用程序放在不同的文件夹中?这不会在应用程序之间创建适当的分隔。创建两个应用程序池并将它们分配给两个应用程序。