如果你的网站遇到cookies跨域设置失效,不管通过iframe还是jsonp等,原本正常的流程突然走不通了。
首先确认是跨域失败,谷歌浏览器或其他封装chrome内核版本足够新,因为新版增加了 SameSite 策略,默认禁止跨域访问的资源发送 cookie。
解决方法:设置cookies时,加上SameSite=none,并且确保SSL(即https://访问)。
首先,了解SameSite ,它有3个可选值 :
- Strict 禁止第三方 cookie
- Lax 仅影响到 POST / iframe / AJAX / image 这些请求
- None 关闭 SameSite 选项,允许跨域访问cookies
若是net开发环境,则确保版本至少Framework 4.7.2,另外web.config
<system.web>
...
<httpCookies sameSite="None" requireSSL="true" />
若是php环境,就简单了直接操刀就可以了。
着重说下net,因为很繁琐。
安装完framework4.7.2以上(或4.8),若是本地开发还需要确保framework为开发版,然后输入代码System.Web.SameSiteMode.None,若正常表示OK了。
编译运行,如果浏览器中查看cookies,SameSite项目为空,表示SameSite=none没有生效,因为framework还需要打补丁,O(∩_∩)O 微软的东西需要好多补丁才能用。此时只能更新你的操作系统,windows10直接点击设置--windows更新即可。其他类推。
安装重启后,再打开浏览器,进行本地测试,samesite=none出现。
最后再强调下,需要根据不同浏览器进行判断,若不支持sameSite=none也会出现cookies设置失败。