You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止登录第二个端口转发的.NET Core MVC实例时第一个被登出?

问题原因

这是同一浏览器中两个实例的认证Cookie互相覆盖导致的:

  • .NET Core MVC默认使用名为.AspNetCore.Identity.Application的Cookie存储登录状态
  • 通过同一个WANIP(不同端口)访问两个实例时,浏览器会判定为同一域名下的请求,将同一个Cookie发送给两个实例。登录实例二时,新的认证Cookie会覆盖实例一的Cookie,直接导致实例一登录状态失效。
  • 局域网内访问用的是两个实例的不同本地IP,Cookie绑定到各自IP不会冲突;不同浏览器的Cookie是隔离存储的,因此也不会互相影响。
解决方案

1. 给每个实例配置独立的Cookie名称(最直接有效)

修改每个实例的认证配置,指定唯一的Cookie名称:

  • 实例一的Program.cs(或Startup.cs):
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        options.Cookie.Name = "Instance1_Auth"; // 自定义唯一名称
    });
  • 实例二的Program.cs(或Startup.cs):
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        options.Cookie.Name = "Instance2_Auth"; // 与实例一不同的名称
    });

2. 可选:配置Cookie的Path属性(需配合路由调整)

如果不想修改Cookie名称,可以给每个实例的Cookie指定不同的Path,让浏览器区分:

  • 实例一配置:
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        options.Cookie.Path = "/instance1";
    });
  • 实例二配置:
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        options.Cookie.Path = "/instance2";
    });

注意:这种方式需要确保两个实例的路由前缀分别对应/instance1和/instance2,否则Cookie无法正确匹配。

内容的提问来源于stack exchange,提问作者David_Jones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 13:55:21