1、 就是在chrome://flags/里设置禁用SameSite,(重启浏览器);
2、 后端进行设置 SameSite=none并且设置secure;(就是用https)(看后端框架能否支持此设置);
3、使用Nginx配置SameSite;
Nginx的proxy_cookie_path功能,具体配置方法(在location节点下加入,配置后重载Nginx):
如果站点Cookie所在目录在根目录/下,设置如下:
proxy_cookie_path / “/; secure; SameSite=None”;
如果站点Cookie所在目录在abc目录下,设置如下:
proxy_cookie_path /abc/ “/abc/; secure; SameSite=None”;
如果无法确定站点Cookie目录,可使用Chrome开发者工具,监测Network下网络请求,找到Response Headers中set-cookie属性值,该值中有path属性值即为Cookie目录,也即上文要替换的/或者/abc/值。
配置示例:
server {
listen 443 ssl http2;
server_name www.demo.com;
# add_header X-XSS-Protection "1; mode=block";
# add_header X-Frame-Options SAMEORIGIN;
add_header Strict-Transport-Security "max-age=15768000";
location / {
root /var/www/html;
}
location /api {
proxy_pass http://localhost;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 配置位置如下
proxy_cookie_path / "/; httponly; secure; SameSite=None";
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2和3这两种方式在以后新版浏览器中可能会失效,因为浏览器可能将全面禁止三方cookie,到时候怎么设置都不起作用了。。。
扩展阅读:
前端的withCredentials属性:
XMLHttpRequest.withCredentials 属性是一个Boolean类型,它指示了是否该使用类似cookies,authorization headers(头部授权)或者TLS客户端证书这一类资格证书来创建一个跨站点访问控制(cross-site Access-Control)请求。在同一个站点下使用withCredentials属性是无效的。
————————————————
版权声明:本文为CSDN博主「梅花屋主」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_46653284/article/details/109615544
网友评论