以前说过,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,就取不到值了。
越努力越幸运,努力须要自制,但愿本身可以有更强的自制力!感恩自信自律!