gpt4 book ai didi

php - 从主域为子域设置 cookie

转载 作者:可可西里 更新时间:2023-11-01 01:04:23 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com