Angular使用ngx-cookie-service跨域存储Cookie失败如何解决
ngx-cookie-service跨域设置Cookie失败解决方法
核心前置规则
浏览器出于安全限制,不允许前端在A域名下主动写入B域名的Cookie,所有跨域Cookie的写入都需要满足同源/同根域规则,或是由对应域名的后端接口通过响应头设置。
分场景排查方案
场景1:前端当前访问域名与要设置的
172.61.25.20完全无关
比如你当前在localhost:4200开发调试,直接指定domain为172.61.25.20的写入操作会被浏览器直接拦截,这种场景无法通过前端单独配置解决,需要改为后端接口返回Set-Cookie响应头设置,同时满足以下条件:后端接口响应头必须配置:
Access-Control-Allow-Credentials: trueAccess-Control-Allow-Origin必须指定为你前端的实际访问域名,不能设为*
前端发请求时必须开启withCredentials: true,Angular HttpClient示例:
this.http.get('http://172.61.25.20/api/xxx', { withCredentials: true })场景2:前端当前访问的就是
172.61.25.20,或是同根域下的其他服务
先确认你使用的ngx-cookie-service版本,v15及以上版本才支持你写的顺序传参,旧版本建议显式传入配置对象避免参数错位:this.cookieService.set('Authorization', `Bearer ${res.access}`, { expires: 1, path: '/', domain: '172.61.25.20', secure: false, sameSite: 'Lax' });如果是同根域下跨子域共享Cookie,domain参数要填上级根域,比如两个服务分别在
172.61.25.20和172.61.25.21,要共享Cookie的话domain参数填.172.61.25.(注意前后的点),如果是域名形式的话填.yourdomain.com。其他通用排查点
- 如果你当前是HTTPS协议访问站点,要把
secure参数改为true,否则Chrome、Firefox等现代浏览器会拦截非安全的Cookie写入 - 打开浏览器开发者工具的「Application」面板,找到「Storage > Cookie」下对应域名的条目,看写入的Cookie是否有黄色警告标识,悬停即可看到具体的拦截原因
- 确认
sameSite参数配置是否符合你的场景,如果是跨站请求的话需要把sameSite改为None,同时必须把secure设为true
- 如果你当前是HTTPS协议访问站点,要把
内容的提问来源于stack exchange,提问作者Piyush
相关产品推荐
相关产品推荐

