以前說過,core須要什麼功能就添加並使用什麼中間件redis
照例,在Startup.cs的ConfigureServices方法中添加services.AddSession();再在Configure方法中添加app.UseSession();(注意要在UseMvc以前)後端
再引用Microsoft.AspNetCore.Http就能夠使用session啦數組
HttpContext.Session.Set(name, buffer);//使用上下文點出session賦值Setcookie
HttpContext.Session.Get(name);//使用上下文點出session拿到對應值,用TryGetValue會保險一點session
Set只是設置字節數組的值,若是要針對特定類型,能夠引入相應的擴展程序集或者自行擴展app
注意:url
1. 在services.AddSession();以前最好有services.AddDistributedMemoryCache();表示進程內保持session。也能夠使用redis等保存session,如services.AddDistributedRedisCache();spa
2. 在Startup.cs的ConfigureServices方法中默認配置了用戶協議中間件
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});進程
其中options.CheckConsentNeeded = context => true;表示是否通過用戶cookie協議贊成。默認true
當爲true時而又無彈窗提示用戶是否贊成時,將致使session沒法回傳,故設置爲false纔可正常使用session
至於原理,此處引用網上大神的說法:
首先session在寫入時會返回給用戶sessionid,這個id通常是存儲在用戶cookice或者url裏在取session值的時候使用id查詢的,可是上面這個一旦開啓,表明着用戶必須贊成你才能夠使用cookie技術,致使你的sessionid沒法回傳,後端就會認爲這是一個新的會話,因此產生了新的sessionid,就取不到值了。
越努力越幸運,努力須要自制,但願本身可以有更強的自制力!感恩自信自律!