You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

前端生产环境请求PHP后端时$_SESSION为空,开发环境运行正常

问题原因与解决方案
  • 跨域请求未携带身份凭证
    开发环境下前端请求路径为同域下的/api,浏览器会自动携带包含PHPSESSID在内的所有Cookie,经webpack代理转发后后端可以正确识别会话。生产环境前端域为https://www.mydomain.abc,直接请求https://api.mydomain.abc属于跨域请求,默认情况下前端请求库(axios/fetch等)不会自动携带Cookie,后端接收不到PHPSESSID会每次生成新的会话,导致$_SESSION为空。
    解决方法:

    1. axios全局配置添加withCredentials: true
    2. fetch请求添加参数credentials: 'include'
  • CORS配置缺失凭证允许头
    跨域携带Cookie的场景下,除了配置允许的请求源外,Apache还需要返回响应头Access-Control-Allow-Credentials: true,且不能使用*作为允许的源(你当前已经配置了明确的允许源,符合要求),否则浏览器会拦截响应导致Cookie无法写入。

  • Session Cookie属性配置不符合跨域要求
    新版本浏览器默认对Cookie开启SameSite=Lax限制,跨域请求下默认不会携带Cookie,需要调整PHP的Session Cookie配置,可在session_start()之前添加如下配置:

session_set_cookie_params([
    'secure' => true, // 仅HTTPS下传输,符合生产环境的HTTPS配置要求
    'samesite' => 'None', // 允许跨域携带Cookie
    'domain' => '.mydomain.abc', // 可选配置,允许所有子域共享Cookie
    'httponly' => true // 建议开启,防止XSS攻击窃取Cookie
]);
  • 反向代理Cookie转发异常
    确认前端访问后端的反向代理NGINX没有过滤Cookie请求头,也没有修改后端返回的Set-Cookie响应头,可添加如下配置确保Cookie正常传递:
proxy_pass_request_headers on;
proxy_pass_header Set-Cookie;

内容的提问来源于stack exchange,提问作者Héctor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 11:57:01