问题
首先配置是没问题的但是 chrome 请求cookie携带不上
全局配置
axios.defaults.withCredentials = true
或者单个请求头配置
withCredentials:true
具体表现
最近在玩vue-axios,发送验证码和登录请求的时候需要携带cookie信息,但是死活携带不上去(本人平常用的都是chrome浏览器),后来实验了下FireFox竟然可以,没理由我chrome不可以呀,遂深入了解了下
原因
发现是chrome是从51版本开始,Cookie 新增加了一个SameSite属性,用来防止 CSRF 攻击和用户追踪。
简单来说SameSite属性用来限制第三方 Cookie,从而减少安全风险
具体 SameSite 解释引用 阮一峰的一篇文章
解决方案
1. 换用其他浏览器例如FireFox
2.还用chrome ,地址栏 输入 chrome://flags/
搜索 samesite ,看到搜索结果 含有 SameSite 改为Disabled
ok,重启,测试搞定
3.修改架构不用跨域调用
上面两种方法都是应急使用的,都不符合应对场景的话,推到重来,不跨域
4.申请SSL证书
最好的解决方案就是申请一个ssl证书,以https的形式来调用,设置cookies头为Set-Cookie: token={token}; SameSite=None; Secure