【问题标题】:Cookies only set with web security disabled? (Node.js/Express.js app)仅在禁用网络安全的情况下设置 Cookie? (Node.js/Express.js 应用程序)
【发布时间】:2013-07-10 01:46:37
【问题描述】:

我正在使用 node/express 来制作纯后端 api。我的前端(angular.js)托管在单独的服务器上。对于每个允许 CORS 的请求,我都有几行中间件。

如果我使用 -args --disable-web-security 标志启动 chrome,一切正常!

但是,如果我正常启动它,cookie 似乎没有在浏览器中设置,因此节点端的会话没有启动。对于 safari/mobile safari/etc.

我尝试过诸如“接受所有 cookie”/“从不阻止 cookie”之类的浏览器选项。我想也许浏览器不喜欢 localhost,但这在 localhost 和实际托管域上的行为是相同的。

流程是:

  1. 我登录并使用 id 设置会话,成功后前端将定向到下一页。这有效,我控制台记录了 req.session.id 并且它是正确的。

  2. 在发送请求的下一页上,节点服务器配置为使用会话中的 id 进行此请求。使用 safari/mobile safari/chrome,req.session.id 突然为空。禁用 chrome -security 后,req.session.id 仍然正确且行为正常。

【问题讨论】:

标签: node.js session cookies express session-cookies


【解决方案1】:

请参考这个涵盖跨域 cookie 和会话的答案:Using Express and Node, how to maintain a Session across subdomains/hostheaders

【讨论】:

  • 谢谢,这有帮助。但是,我在您的答案中尝试了所有方法,但仍然无法正常工作。可能是因为我的服务器不在子域上,而是在完全不同的域上?例如,myfrontend.com/home 正在向 mybackend.com/login 发送 POST。我认为这与我的 cookie 设置有关cookie: { path: '/', domain: 'mybackend.com', maxAge: 1000*60 }
  • 您必须验证是否在每个请求上都发送了 cookie。请让我知道它是否已发送。您可以通过在后端整合 cookie 数据并查看请求的网络选项卡标题来验证它。
  • 后端总是发送一个cookie (backend.sid = qjiwfb...)。使用常规模式 chrome,客户端永远不会为任何请求发送任何 cookie。如果我转到 chrome 设置 -> 管理 cookie,则永远不会设置 cookie。使用-web-security disabled chrome,客户端发送cookie(backend.sid)并且应用程序运行良好。如果我去 chrome settings -> manage cookies ,cookie就在那里。
  • 请阅读上面与 XHR withCredentials 中特殊标志相关的文本链接,这可能会解决您的问题。
  • 终于成功了!我之前确实有withCredentials 标志,但我想我不小心在另一个地方重写了。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-28
  • 2019-08-17
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多