.net core中的Session以及HttpContext对象使用小结
session用于识别用户并保持用户信息,就是一个会话 ,在浏览器不关闭的前提下,可以保存用户的信息,比如登录的保存用户信息从一个网页跳转到另一个网页,你的用户信息就可以用session。
.net core是一个高度组件化的框架,很多功能比如授权,认证,回话状态等都是通过中间件的方式引入的,必须基于NuGet添加,或者基于project.json添加,然后保存VS会启动还原类库。
1、添加Session
在你的项目上基于NuGet添加:Microsoft.AspNetCore.Session。一般我们在建立core web项目时,程序已经添加了对session的支持。
2、添加Session配置服务
在startup.cs找到方法ConfigureServices(IServiceCollection services) 注入Session(这个地方是Asp.net Core pipeline):
配置session超时时间60分钟。
services.AddSession(o => { o.IdleTimeout = TimeSpan.FromSeconds(60 * 60); });
也可以不指定时间:services.AddSession();
3、启用Session配置
session注入到了服务,我们还要告诉Asp.net Core使用内存存储Session数据 app.UseSession();
注意放置代码的顺序,Session必须在MVC之前。
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } //用户session服务 app.UseSession(); app.UseHttpsRedirection(); app.UseStaticFiles(); //app.UseCookiePolicy(); //创建路由 app.UseMvc(routes => { routes.MapRoute( name: "Default", template: "{controller}/{action}/{id?}", defaults: new { controller = "Home", action = "Index" } ); }); app.UseMvc(); }
在MVC Controller里使用HttpContext.Session
public class HomeController:Controller { public IActionResult Index() { HttpContext.Session.SetString("code","123456"); return View(); } public IActionResult About() { ViewBag.Code=HttpContext.Session.GetString("code"); return View(); } }
2、如果不是在Controller里,你可以注入IHttpContextAccessor,有两种方式,一种是在类的构造函数里面注入,如下:
public class SomeOtherClass { private readonly IHttpContextAccessor _httpContextAccessor; private ISession _session=> _httpContextAccessor.HttpContext.Session; public SomeOtherClass(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor=httpContextAccessor; } public void Set() { _session.SetString("code","123456"); } public void Get() { string code = _session.GetString("code"); } }
3、另外一种是通过IServiceProvider,这时需要在startup中Configure中得到这个对象,然后通过
Microsoft.AspNetCore.Http.IHttpContextAccessor factory = app.ApplicationServices.GetService<Microsoft.AspNetCore.Http.IHttpContextAccessor>();
Microsoft.AspNetCore.Http.HttpContext context = factory.HttpContext;
或者
Microsoft.AspNetCore.Http.IHttpContextAccessor factory = app.ApplicationServices.GetService(typeof(Microsoft.AspNetCore.Http.IHttpContextAccessor)); Microsoft.AspNetCore.Http.HttpContext context = factory.HttpContext;
得到Microsoft.AspNetCore.Http.HttpContext对象,这时就可以和使用HttpContext了,里面有Session,Request,Response对象的使用,在使用Request对象时,这样获取HttpContext.Request.Query[""]请求参数,获取cookie通过HttpContext.Request.Cookies[""],这里有一点需要注意netcore中的cookie添加的是通过HttpContext.Response.Cookies.Append方法添加的,和asp.net 不同的是添加的键值对的值是自动UrlEncode的,所以获取cookie的时候是UrlDecode的,这个需要注意。
原文:https://www.jianshu.com/p/0315aa029867
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2017-08-05 sqlserver 2014使用时有Cannot find one or more components
2017-08-05 win10 安装microsoft.net framework3.5