【发布时间】:2022-01-05 20:52:00
【问题描述】:
我正在尝试在 javascript 获取 CORS 请求中将 Cookie 发送到 PHP 脚本。请求从https://sub1.example.com 开始,包含以下选项:
let response = await fetch('https://sub2.example.com/target.php', {
method: "POST",
headers: headers,
body: formData,
mode: 'cors',
credentials: 'include',
cache: 'no-store'
});
相应的 PHP Script 设置以下 Headers:
header('Access-Control-Allow-Origin: https://www.example.com');
header('Access-Control-Allow-Methods: POST, OPTIONS');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization, X-Request-With, Set-Cookie, Cookie, Bearer');
但是 Cookie 标头没有随请求一起发送。我也试过了:
let headers = new Headers();
headers.set('Cookie', document.cookie);
这也没有效果。我到底做错了什么?
我检查了开发工具中的网络选项卡。 PHP 脚本中的 $_COOKIE 也是空的。绝对没有错误。我还可以看到 Cookie 标头是在任何非 CORS fetch 请求中发送的。
编辑:以下是其中一个 Cookie 的设置:
Name: PHPSESSID
Path: /
Secure: true
SameSite: none
我无法共享域,因为它不是公开的。但是 Cookie 域与请求标头中的 Origin 具有相同的值(减去 https://)。
编辑 2:更改了获取 URL 以更清楚地了解正在发生的事情。
【问题讨论】:
-
Cookie Header is not send...你怎么知道?目前尚不清楚您测试了什么,或者您看到了什么后果。有错误吗? -
我检查了开发工具中的网络选项卡。 PHP 脚本中的
$_COOKIE也是空的。绝对没有错误。我还可以看到,Cookie 标头是在无 CORS 获取请求中发送的。 -
请编辑您的问题并添加相关cookie的
Name、Domain、Path、Secure和SameSite属性值。 -
@jub0bs 我已经编辑了问题。
-
@KHansen 嗯,有答案。浏览器永远不会向
sub2.example.com发送Domain属性的有效值为sub1.example.com的cookie。如果您希望将 cookie 发送到子域,则需要将其Domain属性显式设置为公共父域,例如example.com。见developer.mozilla.org/en-US/docs/Web/HTTP/…
标签: javascript cookies attributes fetch