遇到的问题:session可以存储,但读取时始终未null
最近项目从.net core2.0升级为2.1时,session是存储到redis里的,登录验证码是存储到session的,监控发现已经存储到redis了,但读取确始终未null
相关代码:
session的扩展方法如下:
引入如下:
调试如下:
再点击登录按钮时发现session未null
发现2.1比2.0 Startup ConfigureServices默认多了这么一段代码
从字面了解应该是需要必经过用户cookie协议同意,个人理解为首先session在写入时会返回给用户sessionid,这个id一般是存储在用户cookice或者url里在取session值的时候使用id查询的,但是上面这个一旦开启,代表着用户必须同意你才可以使用cookice技术,导致你的sessionid无法回传,后端就会认为这是一个新的会话,所以产生了新的sessionid,就取不到值了。
我的解决办法是options.CheckConsentNeeded = context => false;注释掉就可以了。
另外发现以下代码也有影响,应当去掉
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});