我一直在搜索很多很多来源,但似乎没有任何描述我的情况。
我目前正在尝试开发一个网站(ReactJS)和一个后端(NodeJS w / Express)。假设在生成时分别可以example.com
和example.com/api
访问它们,然后在开发时localhost
和localhost:3030
访问它们。 Cookie由API设置。
在我的本地计算机上的浏览器控制台中输入alert(document.cookie)
输出我的非HTTPOnly cookie。但是,当我在我的虚拟主机上尝试此操作时,它只返回一个空警告框,表示document.cookie
是一个空字符串""
。这是在Opera,Firefox和Chrome上测试的。
我也尝试从我的Node应用程序中为我的会话cookie取消设置HTTPOnly和安全标志,但这也不会写入警报输出。
有谁在这里知道为什么会发生这种情况和/或如何使这项工作?谢谢!
编辑:这是我在NodeJS上设置我的cookie的方式
app.use(function (req, res, next) {
res.cookie("My-Cookie", random());
next();
})
EDIT2:我想这是CORS实际工作的一个问题。但我仍然不明白为什么我的localhost版本工作,即使它也是CORS。
答案 0 :(得分:1)
原来这个问题与Set-Cookie域有关。首先,当我在浏览器中打开www.example.com
时,我的Cookie设置为example.com
。其次,我通过在所有cookie设置上指定{domain}
选项来修复此问题,包括cookie生成器,如下所示:
app.use(function (req, res, next) {
res.cookie("My-Cookie", random(), { domain: '.example.com' });
next();
});
现在我可以打开www.example.com
或example.com
,document.cookie
会按预期返回Cookie值。
希望这可以帮助那些不知道这种限制的人。