从主域为子域设置cookie

时间:2013-01-28 20:13:50

标签: php cookies

我有一个网站,由三个域组成:domain.comsub1.domain.comsub2.domain.com

我现在想通过sub1.domain.com上的AJAX获取domain.com上设置cookie的页面。这个cookie必须可用于所有三个域。

我已经尝试过:setcookie('name','value',time()+3600,'/','.domain.com');并且我尝试过:setcookie('name','value',time()+3600,'/','domain.com');(在域名之前看点,我被告知旧的浏览器不会接受它。)但这并没有工作。事实上,没有设置cookie。

如何在子域的AJAX请求中设置cookie?我已经将header('Access-Control-Allow-Origin: *');添加到了setcookie页面。

1 个答案:

答案 0 :(得分:4)

使用凭据时需要做几件事:

  • withCredentials flag

AJAX请求需要设置xhr.withCredentials = true;

  • Access-Control-Allow-Credentials

服务器还必须回复header('Access-Control-Allow-Credentials: true');

  • 不允许使用通配符

指定withCredentials时,服务器不能允许*的来源。因此,您必须回复有效域列表:

header('Access-Control-Allow-Origin: http://sub1.domain.com,http://sub2.domain.com');

如果您仍想拥有任意子域列表,可以执行以下操作:

if (substr($_SERVER['HTTP_ORIGIN'], -11) === '.domain.com') {
    header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']);
}

这会将允许的来源设置为Origin请求标头的值,但前提是它位于您的域中。