如何在.NET Core 2.0视图中使用Session变量?原.NET Framework 4.6可实现
在.NET Core 2.0中配置并使用Session变量
嘿,我来帮你搞定这个Session配置的问题!你之前在.NET Framework里直接用Session的方式,在.NET Core 2.0里需要多几步显式配置——毕竟Core是模块化设计,默认并没有开启Session功能。下面是具体的配置步骤:
1. 在ConfigureServices中添加Session相关服务
你需要先添加Session依赖的缓存服务,再注册Session本身。把这段代码加到你的ConfigureServices方法里(注意顺序,缓存要放在Session前面):
public void ConfigureServices(IServiceCollection services) { // 1. 添加分布式内存缓存(开发环境用这个足够,生产可换成Redis等) services.AddDistributedMemoryCache(); // 2. 配置并添加Session服务 services.AddSession(options => { options.IdleTimeout = TimeSpan.FromMinutes(30); // 设置Session过期时间 options.Cookie.HttpOnly = true; // 禁止前端JS访问Session Cookie,提升安全性 options.Cookie.IsEssential = true; // 标记为必要Cookie,符合隐私规范 }); // 你的原有代码 services.AddMvc(); services.AddDbContext<L2Context>(options => options.UseSqlite("Data Source=test.db")); }
2. 在Configure中启用Session中间件
这一步非常关键,必须把UseSession()放在UseMvc()之前——中间件是按顺序执行的,只有先经过Session中间件,后续的MVC才能正常读取和写入Session。修改你的Configure方法:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { // 你的其他中间件(比如UseStaticFiles、UseDeveloperExceptionPage等) // 启用Session中间件,一定要在UseMvc之前 app.UseSession(); // 你的MVC路由配置 app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }
3. 在控制器中设置Session值
比如登录逻辑里,你可以这样把ID存入Session:
public IActionResult Login(string userId) { // 将ID存入Session HttpContext.Session.SetString("ID", userId); return RedirectToAction("Index"); }
4. 在视图中读取Session值
和.NET Framework类似,但要通过Context.Session来访问,比如你要显示的h2标签:
<h2>@Context.Session.GetString("ID")</h2>
为了避免Session为空时显示空白,你可以加个默认值:
<h2>@(Context.Session.GetString("ID") ?? "未登录")</h2>
额外提醒
- 如果你是生产环境部署,建议把分布式内存缓存换成更可靠的方案(比如Redis),只需要把
AddDistributedMemoryCache()替换为对应的缓存服务注册方法即可。 - Session的Cookie配置可以根据你的需求调整,比如修改Cookie名称、域等。
内容的提问来源于stack exchange,提问作者Thou
相关产品推荐
相关产品推荐

