【发布时间】:2023-12-13 20:02:01
【问题描述】:
所以我正在尝试为本地开发设置环境,以便从我的开发服务器dev.mydomain.com 提取数据。
提供数据的 tornado REST 服务器使用基于 cookie 的身份验证。
为了获取 cookie,我向服务器发送了一个 AJAX 登录请求(来自网站 localhost),然后安全 cookie 在响应中返回。我可以在 chrome 控制台(网络->cookies)中看到这一点。它具有正确的名称、值、域 (dev.mydomain.com) 以及所有内容。
但是,cookie 没有设置,随后的 REST 请求失败。它与跨域无关。如果我转到 dev.mydomain.com 并在另一个选项卡中手动登录,则 cookie 会正确设置,并且我从本地域发送的所有后续请求都可以正常工作(因为它们获取了现在存在的 cookie)。
我所有的请求都包含这个:
xhrFields: {
'withCredentials': true
}
这就是我的龙卷风服务器设置 cookie 的方式:
self.set_secure_cookie(
COOKIE_NAME, tornado.escape.url_escape(str(COOKIE_VALUE)),
expires_days=1, domain="dev.mydomain.com"
)
知道如果登录请求来自localhost,为什么没有设置cookie吗?
我尝试将 127.0.0.1 映射到 foo.mydomain.com(无论值多少),但这无济于事。
另外,我无法使用 javascript 获取 cookie。试过xhr.getResponseHeader('Set-Cookie');,结果为空。
【问题讨论】:
-
可能是协议不匹配。我从 dev.mydomain.com 请求,并在 http 上运行 localhost。
-
不,好像不是这样。
标签: javascript python cookies cross-domain tornado