问题描述
在.net core 2.1 环境下,设置SameSiteMode.None,同时设置options.CheckConsentNeeded = context => false;依旧session为空。浏览器为chorme。
问题原因
根据微软描述,ASP.NET Core 2.1 内置了对SameSite属性的支持,但它已写入原始标准。 修补后的行为更改了的含义 SameSite.None ,以发出值为的 sameSite 特性 None。
SameSite
SameSite 是 Chrome 51 版本为浏览器的 Cookie 新增的了一个属性, SameSite 阻止浏览器将此 Cookie 与跨站点请求一起发送。其主要目标是降低跨源信息泄漏的风险。同时也在一定程度上阻止了 CSRF(Cross-site request forgery 跨站请求伪造)。
Cookie 的SameSite属性用来限制第三方 Cookie,从而减少安全风险。(文本引用参见)
直白说就是一种安全策略。我们本地开发环境是http的,所以导致了Session传不过来。所以设置再多项目也无效。
解决方式
因为我这里的问题不是代码层面(同事的可以取到),只能在浏览器上解决。修改chrome配置项。
- 地址栏:chrome://flags
- 搜索:SameSite by default cookies
- 选择:disabled
- 重启浏览器
(ps:这是因为本地是http不是https导致的)
如果是代码层面
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => false;//是否经过用户同意
options.MinimumSameSitePolicy = SameSiteMode.None;
});