ASP.NET Core设置的短时效Cookie在Chrome中无法保存的问题
问题分析与解决方案
问题根源
当前GMT时间为2023年7月25日05:35,你设置的Cookie过期时间为GMT 05:50:54,仅比当前GMT时间晚15分钟左右。若服务器系统时间与实际GMT存在秒级/分钟级偏差,或浏览器本地时间与GMT不同步,Chrome会判定该Cookie为「即将过期」甚至「已过期」,从而拒绝保存。而延长过期时间至2天时,时间偏差的影响被抵消,因此Cookie能正常存储。
解决步骤
校准服务器时间
确保GoDaddy服务器的系统时间与GMT严格同步(PDT为GMT-7,服务器时间22:35对应GMT 05:35是正确时区映射,但需保证时间精度):- Windows服务器执行命令:
w32tm /resync - Linux服务器执行命令:
ntpd -q
- Windows服务器执行命令:
修正ASP.NET Core的Cookie过期时间计算逻辑
避免基于服务器本地时间计算过期时间,改用DateTime.UtcNow生成标准GMT时间,确保expires字段精准:var cookieOptions = new CookieOptions { Expires = DateTime.UtcNow.AddMinutes(15), // 基于UTC时间计算15分钟过期 HttpOnly = true, // 提升Cookie安全性,防止XSS攻击 Secure = true, // 生产环境建议开启,仅通过HTTPS传输Cookie SameSite = SameSiteMode.Lax // 适配现代浏览器的跨站Cookie策略 }; Response.Cookies.Append("_Gex.Application", "chunks-2", cookieOptions);检查Chrome的Cookie配置
打开chrome://settings/cookies,确认浏览器未设置自动清除近期过期的Cookie,且允许目标域名存储Cookie。排查Cookie属性冲突
确保未同时设置MaxAge与Expires属性(部分浏览器对这两个属性的优先级处理存在差异),同时验证Cookie的域名、路径设置符合业务需求,避免作用域错误导致的存储失败。
内容的提问来源于stack exchange,提问作者Imran Qadir Baksh - Baloch
相关产品推荐
相关产品推荐

