【发布时间】:2021-07-30 18:40:24
【问题描述】:
我有一个本地测试应用程序在端口 4200 上模仿主机 test.mywebsite.com。
它调用api.test.mywebsite.com(也是本地托管的)到/login
请求通过,服务器返回 200 和一些信息,并随之设置此标头,我在响应标头中看到:
Set-Cookie: refreshToken={JWT here}; expires=Sun, 23-May-2021 20:38:32 GMT; Max-Age=1296000; path=/; domain=.test.mywebsite.com; HttpOnly
这不会存储在我的浏览器(Chrome 或 Firefox)中,我正在尝试找出原因。
如果需要,以下是有关我的设置的更多信息:
Angular 服务器使用ng serve --host=test.mywebsite.com 在http://test.mywebsite.com:4200 上获取测试前端
Kubernetes 后端在 localhost 上运行(我的主机文件将 api.test.mywebsite.com 重定向到 127.0.0.1),它将请求定向到使用此代码创建 cookie 的 PHP pod:
setcookie(
"refreshToken", // name
$refreshJWT->token, // token
$refreshJWT->expiration, // expires in 15 days
'/', // path
".".$refreshJWT->domain, // domain
($refreshJWT->environmentType === "test") ? false : true, // security
true // httponly
);
我担心这是一件非常简单的事情,或者是某个地方的疏忽,但我终生无法找出是什么。我唯一能想到的就是与 cookie 主机不匹配的端口,但据我所知,cookie 域与端口无关。无论如何,我已经尝试将:4200 添加到 cookie 域的末尾,但仍然遇到同样的问题。
更新:setcookie() 返回 true,因此在设置标头之前没有输出。
更新 2:我将它部署到临时服务器,尽管没有发生 DNS 欺骗或代理,但问题仍然存在。
Update3:我已将其范围缩小为我的 api 服务器的 Access-Control-Allow-Origin 标头和我的 JS 对 withCredentials 的使用的组合
我的Access-Control-Allow-Origin 设置为*。如果我将请求withCredentials 作为false 发送,它会将正文返回给JS,但拒绝cookie。如果我将withCredentials 设置为true,它会设置cookie 但拒绝让JS 读取正文。
【问题讨论】:
标签: php angular cookies setcookie