跨域请求需显式启用 credentials 并配置服务端 CORS 与 Cookie 属性:前端设 credentials: 'include' 或 withCredentials: true;后端 Access-Control-Allow-Origin 必须为具体域名且含 Access-Control-Allow-Credentials: true;Cookie 需设 SameSite=None; Secure。

跨域请求未携带凭据(credentials)时,浏览器不会发送 Cookie,导致后端无法识别用户会话,表现为“已登录却 401”“Session ID 不一致”或“每次请求都是新会话”。排查需从前端配置、浏览器行为、服务端响应三方面入手。
检查前端 fetch / Axios 是否启用 credentials
默认情况下,fetch 和 Axios 都不会发送 Cookie。必须显式开启:
-
fetch:添加
credentials: 'include'(推荐),或'same-origin'(仅同源时发) -
Axios:设置
withCredentials: true - 注意:
credentials: 'omit'或未设置等价于不发 Cookie;'include'要求后端必须明确允许凭据(见下条)
确认服务端 Access-Control-Allow-Origin 不为通配符 *
当请求携带凭据(credentials: 'include')时,浏览器强制要求服务端的 CORS 响应头 Access-Control-Allow-Origin 必须是**具体域名**(如 https://a.com),不能是 *,否则直接拒绝响应并报错:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 控制台常见错误:
Failed to load: The value of the 'Access-Control-Allow-Origin' header must not be the wildcard '*' when the request's credentials mode is 'include' - 修复方式:后端需根据请求头
Origin动态回写合法来源(如https://a.com),同时确保Access-Control-Allow-Credentials: true
验证 Cookie 属性是否兼容跨域发送
即使启用了 credentials,若服务端 Set-Cookie 中设置了不兼容的属性,浏览器也不会在后续跨域请求中带上该 Cookie:
立即学习“Java免费学习笔记(深入)”;
-
SameSite=Strict或SameSite=Lax:在跨站请求中默认不发送(Lax 对部分 GET 场景例外,但 AJAX 请求基本不触发) - 解决方法:后端 Set-Cookie 应设为
SameSite=None; Secure(Secure表示仅 HTTPS 传输) - 检查方式:打开浏览器开发者工具 → Application → Cookies,查看目标域名下的 Cookie 是否有
SameSite=None且协议为 HTTPS
抓包确认请求是否真带 Cookie 及响应是否含有效 Session
绕过 JS 抽象层,直击网络行为:
- 用浏览器 Network 面板过滤 XHR/Fetch 请求,点击请求 → Headers 标签页,检查
Request Headers中是否有Cookie: xxx - 对比响应头中的
Set-Cookie是否包含Path=/、Domain(若跨子域需显式指定,如Domain=.example.com)、Secure、SameSite=None - 可临时用
curl -v -b cookies.txt -c cookies.txt [url]模拟,排除浏览器策略干扰

















