3

我有一个网站,由三个域组成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 页面。

4

1 回答 1

4

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

  • withCredentials旗帜

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请求标头的值,但前提是它位于您的域中。

于 2013-01-28T20:38:25.820 回答