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

PHP如何获取子域名Cookie?主域与子域Cookie分离获取方案咨询

解决主域名获取子域名Cookie的方法

首先得明确Cookie的作用域规则:浏览器只会给请求的域名发送匹配其domain属性的Cookie。你现在主域名mukul.com的PHP只能拿到自己的Cookie,是因为子域名nonprod.mukul.com的Cookie默认domain是nonprod.mukul.com,主域名不匹配,浏览器不会把它随请求发送过去。

下面给你两种可行的实现方式:

方式一:调整子域名Cookie的domain属性(适合允许主域名访问子域名Cookie的场景)

如果业务允许主域名获取子域名的Cookie,在设置子域名的Cookie时,把domain属性设为.mukul.com(注意前缀的点)。比如在nonprod.mukul.com的页面中执行以下PHP代码:

setcookie('nonprod_unique_cookie', 'your_value', time()+3600, '/', '.mukul.com');

这样设置后,这个Cookie会同时被主域名mukul.com和子域名nonprod.mukul.com识别,主域名的$_COOKIE数组里就能直接拿到这个子域名的Cookie了。

方式二:通过子域名接口代理获取(适合子域名Cookie需保持独立作用域的场景)

如果不想修改子域名Cookie的作用域,只能通过跨域请求的方式间接获取:

  1. 在子域名nonprod.mukul.com下写一个接口文件,返回当前域名的Cookie:
// nonprod.mukul.com/get-sub-cookies.php
echo json_encode($_COOKIE);
  1. 给这个接口配置CORS权限,允许主域名访问:
    在get-sub-cookies.php的最顶部加上以下代码:
header("Access-Control-Allow-Origin: https://mukul.com"); // 指定允许的主域名
header("Access-Control-Allow-Credentials: true"); // 允许请求携带Cookie
  1. 在主域名mukul.com的页面中,用前端JS请求这个接口获取子域名Cookie:
fetch('https://nonprod.mukul.com/get-sub-cookies.php', {
  credentials: 'include' // 发送请求时自动携带子域名的Cookie
})
.then(response => response.json())
.then(subDomainCookies => {
  // 这里拿到子域名的Cookie,可与主域名Cookie合并后使用
  const mainDomainCookies = <?php echo json_encode($_COOKIE); ?>;
  const allCookies = {...mainDomainCookies, ...subDomainCookies};
  console.log('合并后的所有Cookie:', allCookies);
  // 如需传给后端,可通过AJAX提交allCookies
});

这样就能在主域名环境中同时获取到两个域名的Cookie,再根据业务需求处理合并后的内容。

注意:第二种方式要求两个域名都使用HTTPS(或都用HTTP,生产环境优先HTTPS),且浏览器跨域配置需正常生效。

内容的提问来源于stack exchange,提问作者Mukul Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:05:13