Google 在2020年2月4号发布的 Chrome 80 版本中默认屏蔽所有第三方 Cookie,即默认为所有 Cookie 加上
SameSite=Lax 属性,并且拒绝非Secure的Cookie设为 SameSite=None。
SameSite的作用就是防止跨域传送cookie,从而防止 CSRF 攻击和用户追踪,此举是为了从源头屏蔽 CSRF 漏洞。
操作步骤
1.打开浏览器的设置->隐私设置与安全->Cookie 及其他网站数据->允许允许所有cookie
2.在浏览器里面输入:chrome://flags/ 搜索SameSite 然后设置SameSite by default cookies 为disabled
然后relauch一下就可以解决此问题。
注意
但笔者发现最新版的Chrome(91)版并没有SameSite by default cookies选项似乎是另外一种叫法,并且不能解决此问题,所以附上较老版本的浏览器
地址:chrome90
提取码:ktnz
上面降级的做法可以放弃了,最新解决方案(更新于:2021-9-9)
1.找到Google右键点击属性。
2.在目标添加一下带码:--flag-switches-begin --disable-features=SameSiteByDefaultCookies,CookiesWithoutSameSiteMustBeSecure --flag-switches-end
确定重启即可。
扩展
- 1.跨域:是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实施的安全限制。同源策略(域名、协议、端口均为相同)限制了以下行为:Cookie、LocalStorage 和 IndexDB 无法读取,DOM 和 JS 对象无法获取,Ajax请求发送不出去。
- 2.cookie:cookie一般由服务端生成然后返回给客户端保存
<body>
<%
//实例化一个Cookie
Cookie cookie1 = new Cookie("account","smith");
Cookie cookie2 = new Cookie("password","123456");
//设置Cookie的生命期限10分钟
cookie1.setMaxAge(600);
//添加Cookie到客户端
response.addCookie(cookie1);
response.addCookie(cookie2);
%>
Cookie成功写到客户端
</body>
- 3.客户端发送请求带上cookie
ajax设置 :
xhrFields: {
withCredentials: true
},
axios设置:
末尾
1.解决跨越问题=巧妙的避免浏览器的同源策略(参考:跨越解决方案)
2.使用token代替cookie进行身份验证(参考:cookie,token验证的区别)