【问题标题】:Issue with document.cookie: Works in localhost but Returns Empty on Web Hostingdocument.cookie 的问题:在本地主机中工作,但在虚拟主机上返回空
【发布时间】:2017-11-24 18:38:37
【问题描述】:

我一直在搜索大量资源,但似乎没有任何内容能描述我的情况。

我目前正在尝试开发一个网站 (ReactJS) 和一个后端 (NodeJS w/ Express)。假设它们分别在生产时可通过example.comexample.com/api 访问,然后在开发时可通过localhostlocalhost: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。

【问题讨论】:

  • 所以您想访问您在localhost 上设置/创建的example.com 上的cookie?
  • 我想读取由example.com/api 设置的example.com 上的cookie 但不起作用。另一方面,我可以在由localhost:3030设置的localhost上输出document.cookie
  • 所以基本上你的源代码在本地运行 (localhost) 时可以工作,但不能在公共域名上工作。可能您应该更新您的问题并包含一些相关的源代码,例如创建 cookie 并尝试访问 cookie?谢谢。
  • 要访问 cookie,我在控制台中尝试了 alert(document.cookie),正如我在帖子中描述的那样。我已将我的 cookie 生成器放在帖子中,尽管在我的代码中它是动态生成的。
  • @NewToJS 傻我。 cookie 是为www.example.com 而不是example.com 设置的。用www 打开我的页面解决了它。但我仍然想知道如何在没有 www 或其他方式的情况下使其也能正常工作。

标签: javascript node.js reactjs express cookies


【解决方案1】:

原来这个问题与 Set-Cookie 域有关。首先,当我在浏览器中打开example.com 时,我的cookie 设置为www.example.com。其次,我通过在我的所有 cookie 设置(包括 cookie 生成器)上指定 {domain} 选项来解决这个问题,如下所示:

app.use(function (req, res, next) {
    res.cookie("My-Cookie", random(), { domain: '.example.com' });
    next();
});

现在我可以打开www.example.comexample.comdocument.cookie 按预期返回 cookie 值。

希望这对那些不了解此限制的人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-13
    • 2018-06-26
    • 2014-06-19
    • 1970-01-01
    • 2012-02-16
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多