之前說過,core需要什麼功能就添加並使用什麼中間件 照例,在Startup.cs的ConfigureServices方法中添加services.AddSession();再在Configure方法中添加app.UseSession();(註意要在UseMvc之前) 再引用Microsoft.Asp ...
之前說過,core需要什麼功能就添加並使用什麼中間件
照例,在Startup.cs的ConfigureServices方法中添加services.AddSession();再在Configure方法中添加app.UseSession();(註意要在UseMvc之前)
再引用Microsoft.AspNetCore.Http就可以使用session啦
HttpContext.Session.Set(name, buffer);//使用上下文點出session賦值Set
HttpContext.Session.Get(name);//使用上下文點出session拿到對應值,用TryGetValue會保險一點
Set只是設置位元組數組的值,如果要針對特定類型,可以引入相應的擴展程式集或者自行擴展
註意:
1. 在services.AddSession();之前最好有services.AddDistributedMemoryCache();表示進程內保持session。也可以使用redis等保存session,如services.AddDistributedRedisCache();
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,就取不到值了。
越努力越幸運,努力需要自製,希望自己能夠有更強的自製力!感恩自信自律!