session用於識別用戶並保持用戶信息,就是一個會話 ,在瀏覽器不關閉的前提下,能夠保存用戶的信息,好比登陸的保存用戶信息從一個網頁跳轉到另外一個網頁,你的用戶信息就能夠用session。web
.net core是一個高度組件化的框架,不少功能好比受權,認證,回話狀態等都是經過中間件的方式引入的,必須基於NuGet添加,或者基於project.json添加,而後保存VS會啓動還原類庫。json
在你的項目上基於NuGet添加:Microsoft.AspNetCore.Session。通常咱們在創建core web項目時,程序已經添加了對session的支持。瀏覽器
在startup.cs找到方法ConfigureServices(IServiceCollection services) 注入Session(這個地方是Asp.net Core pipeline):cookie
配置session超時時間60分鐘。session
services.AddSession(o => { o.IdleTimeout = TimeSpan.FromSeconds(60 * 60); });
也能夠不指定時間:services.AddSession();app
session注入到了服務,咱們還要告訴Asp.net Core使用內存存儲Session數據 app.UseSession();框架
注意放置代碼的順序,Session必須在MVC以前。asp.net
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.Sessionide
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(); } }
二、若是不是在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"); } }
三、另一種是經過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的,這個須要注意。