Laravel SPA Ajax请求无法设置CSRF-COOKIE,仅新标签页访问可生效
问题原因及解决方案
核心原因:前端Fetch请求未携带凭证参数
浏览器在跨域Ajax请求中,默认不会发送或保存服务器返回的Cookie。你当前的fetch请求没有指定credentials: 'include'参数,导致服务器返回的Cookie被浏览器直接忽略。而直接在新标签页打开路由属于浏览器的同源导航请求,会自动处理Cookie存储逻辑,所以返回SPA页面后Cookie已存在。
辅助检查点
- SESSION_DOMAIN配置:当前设置为
192.168.100.110,前端端口是5173,Cookie的Domain属性本身不包含端口,这个配置理论上没问题,但要确保浏览器没有对该域名的Cookie做额外限制。 - 协议一致性:确保前后端使用相同的协议(都是HTTP或都是HTTPS),混合协议会导致Cookie无法正常存储。
修复方法
修改前端请求代码,添加credentials: 'include'参数:
const onLogin = async () => { await fetch(import.meta.env.VITE_HTTP_ENDPOINT + 'sanctum/csrf-cookie', { credentials: 'include' }) }
额外建议
- 清除浏览器的缓存和现有Cookie,避免旧配置干扰测试。
- 确认
cors.php中的supports_credentials已设置为true(你当前的配置已经满足这一点)。
内容的提问来源于stack exchange,提问作者João
相关产品推荐
相关产品推荐

