You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

HTTP Cookie无法保存求助:跨端口后端设置Cookie失效排查

问题分析与解决方案

看起来你的Cookie设置缺失了几个关键属性,导致Chrome虽然能在Network面板里看到Set-Cookie响应头,但不会将其存储到本地。我来帮你拆解问题并给出修复方案:

核心原因

你的前端运行在HTTPS默认端口443,后端在10000端口,属于跨端口的跨源场景,再加上现代浏览器的安全限制,缺少两个关键Cookie属性会导致浏览器拒绝存储Cookie:

  • Secure属性:HTTPS站点下,浏览器要求Cookie必须标记为Secure才能被存储(localhost除外),你的代码里未添加这个属性。
  • SameSite属性:当前浏览器默认SameSite=Lax,跨源请求下会限制Cookie的存储与发送,需要设置为None(必须和Secure搭配使用)。

修复代码

修改你的VB代码,给Cookie补充这两个关键属性:

Dim token As IdentityModel.Tokens.Jwt.JwtSecurityToken = Nothing
Dim j As String = JWT.Serialize(FetchSetting("JWTKey"), String.Empty, String.Empty, ClaimsIdn, token, FetchSetting("GlobalTimeout"))
Dim AuthCookie As New Net.Cookie("Authorization", j) With {
    .Expires = token.ValidTo,
    .Path = "/",
    .Domain = "test.mycompany.com",
    .Secure = True, ' 强制仅在HTTPS环境下传输和存储
    .SameSite = Net.CookieSameSiteMode.None ' 允许跨端口/跨源场景使用Cookie
}
Context.Response.Cookies.Add(AuthCookie)

兼容旧框架的备选方案

如果你的.NET框架版本较旧,没有CookieSameSiteMode枚举,可以直接手动拼接Set-Cookie响应头:

Context.Response.Headers.Add("Set-Cookie", $"Authorization={j}; expires={token.ValidTo.ToString("R")}; path=/; domain=test.mycompany.com; secure; SameSite=None")

验证方法

修改后重新测试,在Chrome的Network面板里查看登录请求的Response Headers,确认Set-Cookie头包含secure; SameSite=None,之后再进入Applications > Cookies就能看到你的Authorization Cookie了。

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

火山引擎 最新活动