【问题标题】:Can't read 'httpOnly: false' Cookie无法读取 'httpOnly: false' Cookie
【发布时间】:2019-04-24 13:37:59
【问题描述】:

我有一个写入 cookie 的快速服务器,但我无法从客户端访问它。我可以在 Chrome 开发工具中看到它,它没有被标记为 httpOnly 或 Secure,但是当我尝试通过我的 React 应用程序甚至只是在浏览器控制台中键入 document.cookie 来访问它时,我什么也得不到。

现在 express 服务器在 Heroku 上运行,我的客户端是 localhost。

我被难住了。

这是我设置 cookie 的服务器端代码:

return res
      .status(200)
      .cookie('id_token', token, {
        httpOnly: false,
        path: '/',
        secure: false,
        maxAge: 400000
      })
      .json({
        token: token
      });

【问题讨论】:

  • 1.) 你的 React 代码是什么? 2.) 你在服务器上使用 cors 包吗?
  • 我正在使用 'universal-cookie' const cookies = new Cookies(); const token = await cookies.get('id_token');
  • 在服务器上,我只是使用 express 内置的东西来设置 cookie。
  • 奇怪。这可能是您的中间件顺序的问题。

标签: reactjs express cookies


【解决方案1】:

Express 服务器在 heroku 中运行,Client 服务器在 localhost 中运行。

当 cookie 的 Domain 未设置时,Express 服务器中设置的 cookie 的范围为当前主机。 [1]

假设您的应用程序在express.herokuapp.com 提供服务, 脚本只有在同一主机上运行时才能读取它。 express.herokuapp.com

但是,使用 cookie 范围 在域上设置的 cookie 可以被子域中运行的脚本读取

在开发中,可以将cookie的Domain属性设置为.herokuapp.com

对于生产,我强烈建议将 cookie 显式限定为客户端域。如果客户端和服务器在不同的子域中运行,您可以应用与开发相同的过程。只有在其他子域中运行的其他客户端应用共享 cookie 时,您才应该这样做。

但是,如果客户端和服务器都将在同一个域中运行,我建议保留默认的 cookie 范围。

如果客户端和服务器在不同的域中运行,我强烈建议将 cookie 显式限定为客户端域。

然后在您的/etc/hosts 中添加以下条目到别名localhostherokuapp.com 的子域

127.0.0.1       local.herokuapp.com

访问地址别名,客户端脚本将读取cookie。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多