如何在ASP.NET Core中为Cookie添加前缀?
操作步骤
1. 给认证Cookie加前缀
修改ConfigureServices中AddCookie的配置代码,指定带安全前缀的Cookie名称:
.AddCookie(options => { // 安全前缀可选__Secure-或__Host- // __Host-前缀要求更高:必须HTTPS传输、Path为/、不指定Domain options.Cookie.Name = "__Host-.AspNetCore.Cookies"; options.Cookie.Path = "/"; options.Cookie.Domain = null; options.Cookie.SecurePolicy = CookieSecurePolicy.Always; });
2. 给会话Session Cookie加前缀
修改AddSession的配置代码:
services.AddSession(options => { options.Cookie.Name = "__Host-.AspNetCore.Session"; options.Cookie.Path = "/"; options.Cookie.Domain = null; options.Cookie.SecurePolicy = CookieSecurePolicy.Always; options.Cookie.HttpOnly = true; options.IdleTimeout = TimeSpan.FromMinutes(20); // 可根据需求调整会话超时时间 });
3. 全局统一添加前缀(可选,覆盖所有自定义Cookie)
在CookiePolicyOptions中新增OnAppendCookie事件逻辑,自动给所有未加前缀的Cookie补前缀:
services.Configure<CookiePolicyOptions>(options => { options.CheckConsentNeeded = context => false; options.MinimumSameSitePolicy = SameSiteMode.None; options.Secure = CookieSecurePolicy.Always; // 新增统一前缀逻辑 options.OnAppendCookie = ctx => { if (!ctx.CookieName.StartsWith("__Secure-") && !ctx.CookieName.StartsWith("__Host-")) { ctx.CookieName = "__Host-" + ctx.CookieName; } }; });
注意事项
- 若使用
__Host-前缀,必须确保站点全程HTTPS访问,否则浏览器会拒收Cookie - 若站点需要跨子域名共享Cookie,改用
__Secure-前缀即可,不要使用__Host-前缀 - 修改完成后清理浏览器原有Cookie再进行扫描验证,避免旧Cookie影响测试结果
内容的提问来源于stack exchange,提问作者Kartik Juneja
相关产品推荐
相关产品推荐

