netcore的Session使用小记
之前说过,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,就取不到值了。
越努力越幸运,努力需要自制,希望自己能够有更强的自制力!感恩自信自律!
推荐阅读
-
推荐学习php sesson的朋友必看PHP会话(Session)使用入门第1/2页
-
在Django的视图(View)外使用Session的方法
-
在Python的Django框架的视图中使用Session的方法
-
在Django的session中使用User对象的方法
-
微信小程序登录session的使用
-
使用beaker让Facebook的Bottle框架支持session功能
-
Django组件之cookie与session的使用方法
-
smarty模板中使用get、post、request、cookies、session变量的方法
-
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
-
Django组件cookie与session的具体使用