## 问题描述
之前运行良好的项目,使用Zuul作为网关负责请求的转发与负载均衡,这段时间修改了项目突然发现不支持session跨域了,sensitive-headers:也设置了,withCredentials: true也加了,但是每次请求sessionId都不一致,很苦恼,两天之后发现问题,
一直以为不是错误和异常的一条消息一直以为不是错误和异常的一条消息,点开后发现Indicate whether to send a cookie in a cross-site request by specifying its SameSite attribute
## 原因
新版的Chrome 当请求设置为 “SameSite=None”和“Secure”时,才会发送cookie
得到教训,要达到 0 error, 0 warning 必须把warning视作error
## 解决方案
添加bean
@Bean
public CookieSerializerhttpSessionIdResolver() {
DefaultCookieSerializer cookieSerializer =new DefaultCookieSerializer();
cookieSerializer.setUseHttpOnlyCookie(false);
cookieSerializer.setSameSite("None");
cookieSerializer.setCookiePath("/");
cookieSerializer.setUseSecureCookie(true);
return cookieSerializer;
}
其他方法
1.降低浏览器版本在79以下,或者换别的浏览器
2.换https
3.将前端的url和后端请求接口设置在同一域名下
4.修改Chrome浏览器设置(不安全)
Chrome浏览器地址栏中输入
chrome://flags/#same-site-by-default-cookies
将下图按钮设置为disabled
其实修改这个就可以
网友评论