我有一个网站,由三个域组成: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-page。
最佳答案
使用凭据时需要满足以下条件:
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
请求 header 的值,但前提是它在您的域中。
关于php - 从主域为子域设置 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14570387/