php - 从主域为子域设置 cookie

标签 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-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/

相关文章:

php - PHP 中的 "$$"是什么

php - 将分页添加到内部连接表

php - 使用 Ruby on Rails 保护数据?

python - Django cookie 和 header

javascript - 创建 Cookie 时需要帮助

php - 如何在 laravel 中使用 WhereIn 和 Eloquent?

javascript - X 次访问后隐藏 div(cookie)

go - 设置一个最大年龄的cookie;最大年龄丢失

java - 在 jQuery 中动态设置 cookie 的域

javascript - 在 JavaScript 事件上更新与 MySQL 的聊天