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

跨服务器子域传递Cookie的PHP实现及JS访问问题求助

主域与子域会话共享及Cookie无法被JS访问的解决方案

核心问题:Cookie无法通过document.cookie访问的原因

你在PHP的setcookie中把最后一个参数(httponly)设为了true,这个属性开启后,浏览器会禁止JavaScript读取该Cookie,这就是你能在开发者工具看到Cookie但JS拿不到的直接原因。

第一步:调整PHP的Cookie设置

要让JS能访问Cookie,同时实现主域与子域共享,修改setcookie代码如下:

// 若子域是主域的二级域(如 app.yourdomain.com)
setcookie($cookie_name, $cookie_value, $expiration_time, '/', '.yourdomain.com', true, false);

// 若主域与子域属于跨顶级域(如 yourdomain.com 和 xxx.softr.io),需指定SameSite属性
setcookie($cookie_name, $cookie_value, [
    'expires' => $expiration_time,
    'path' => '/',
    'domain' => '.yourdomain.com',
    'secure' => true, // 必须开启,因为SameSite=None要求HTTPS
    'httponly' => false,
    'samesite' => 'None'
]);
  • 把$subdomain替换为你的主域名(带前缀.,如.yourdomain.com),这样所有子域名都能共享该Cookie
  • httponly设为false,允许JS读取Cookie
  • 跨顶级域场景必须设置SameSite=None,同时确保站点使用HTTPS

第二步:Softr.io端的JS读取Cookie

在Softr.io的页面中,用以下JS代码获取Cookie并处理会话:

function getCookie(cookieName) {
    const cookieArr = document.cookie.split("; ");
    for(let i = 0; i < cookieArr.length; i++) {
        const cookiePair = cookieArr[i].split("=");
        if(cookiePair[0] === cookieName) {
            return decodeURIComponent(cookiePair[1]);
        }
    }
    return null;
}

// 读取会话Cookie并处理
const sessionToken = getCookie('你的Cookie名称');
if(sessionToken) {
    // 在这里执行会话验证逻辑,比如将token传给Softr的用户状态接口
}

安全注意事项

  • 关闭httponly会增加XSS攻击风险,务必确保主域和子域页面无XSS漏洞
  • Cookie中只存储加密后的会话标识,不要存放敏感信息
  • 合理设置Cookie过期时间,避免长期有效

内容的提问来源于stack exchange,提问作者Haider Gohar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:40:13