我有一个网站,由三个域组成:domain.com
,sub1.domain.com
和sub2.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页面。
答案 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
请求标头的值,但前提是它位于您的域中。