.net core 2.1 session为null的问题

 

遇到的问题:session可以存储,但读取时始终未null

最近项目从.net core2.0升级为2.1时,session是存储到redis里的,登录验证码是存储到session的,监控发现已经存储到redis了,但读取确始终未null

相关代码:

.net core 2.1 session为null的问题

.net core 2.1 session为null的问题

session的扩展方法如下:

.net core 2.1 session为null的问题

引入如下:

 .net core 2.1 session为null的问题

调试如下:

.net core 2.1 session为null的问题

   再点击登录按钮时发现session未null

.net core 2.1 session为null的问题

 

发现2.1比2.0 Startup ConfigureServices默认多了这么一段代码

.net core 2.1 session为null的问题

从字面了解应该是需要必经过用户cookie协议同意,个人理解为首先session在写入时会返回给用户sessionid,这个id一般是存储在用户cookice或者url里在取session值的时候使用id查询的,但是上面这个一旦开启,代表着用户必须同意你才可以使用cookice技术,导致你的sessionid无法回传,后端就会认为这是一个新的会话,所以产生了新的sessionid,就取不到值了。

我的解决办法是options.CheckConsentNeeded = context => false;注释掉就可以了。

 另外发现以下代码也有影响,应当去掉

app.UseForwardedHeaders(new ForwardedHeadersOptions
{
 ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});

上一篇:python虚拟环境


下一篇:sessionId详解