如何在.Net Core中创建Cookieless Session(无Cookie会话)
和 ASP.NET MVC 5 及更早版本依赖 Web.config 配置 sessionState 节点的逻辑不同,.NET Core(包括 .NET 5 及后续所有版本)的会话配置全部在服务注册管道中完成,具体步骤如下:
配置步骤
1. 注册 Session 服务并启用无Cookie模式
找到项目的启动文件:
- .NET 5 是
Startup.cs文件的ConfigureServices方法 - .NET 6+ 是顶层语句的
Program.cs文件
在服务注册阶段添加Session服务,核心是设置 Cookie.UseCookies = CookieUsePolicy.Never 强制禁用Cookie,走URL传递会话ID:
services.AddSession(options => { // 会话空闲过期时间,按需调整 options.IdleTimeout = TimeSpan.FromMinutes(20); options.Cookie.Name = ".YourApp.SessionId"; options.Cookie.IsEssential = true; // 核心配置:强制不使用Cookie,启用Cookieless模式 options.Cookie.UseCookies = CookieUsePolicy.Never; // 可选安全配置,按需调整 options.Cookie.HttpOnly = true; options.Cookie.SameSite = SameSiteMode.None; options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest; });
如果你用的是空白项目模板,需要先安装NuGet包:Microsoft.AspNetCore.Session
2. 启用 Session 中间件
在中间件管道中注册Session,注意顺序不能乱:必须放在UseRouting之后、UseAuthorization/端点映射之前:
// .NET 5 Startup.cs Configure方法 或 .NET 6+ Program.cs的中间件配置段 app.UseRouting(); // 必须放在此处 app.UseSession(); app.UseAuthorization(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");
注意事项
- Cookieless 会话的安全性远低于基于Cookie的会话:URL携带的Session ID很容易被日志记录、中间人截获或者用户误分享,仅建议在完全无法使用Cookie的极端场景下启用
- 配置生效后,.NET Core 中间件会自动在URL中插入会话ID片段,也会自动从请求URL中提取会话ID绑定上下文,无需手动处理会话ID的传递逻辑
内容的提问来源于stack exchange,提问作者Pradip Patil
相关产品推荐
相关产品推荐

