【问题标题】:set-cookie header not setting cookie in Edgeset-cookie 标头未在 Edge 中设置 cookie
【发布时间】:2018-12-03 16:48:49
【问题描述】:

我正在本地测试应用程序并向http://localhost:3000/api/auth/login 发出授权请求。带有 JWT 身份验证令牌的响应中会返回一个 set-cookie 标头。 JWT 看起来像:

JWT-TOKEN=[really long alphanumeric string];Version=1;Comment=;Domain=;Path=/;Max-Age=3600;;HttpOnly

之后,我向http://localhost:3000/api/other/resource 发出另一个请求,但收到一个未经授权的错误,因为它期望请求中有一个带有 JWT 令牌的 cookie。

在 Firefox、Safari 和 Chrome 中设置了 Cookie,但在 Edge 中没有设置。 Edge 开发工具控制台中没有出现任何问题。任何想法为什么没有在 Edge 中设置 cookie?

【问题讨论】:

  • 你解决过这个问题吗?我目前正在研究完全相同的问题,但在非本地域上也失败了。
  • 我找到了一个潜在的解决方案,但我的后端团队从未尝试过(比与 Edge 的兼容性更紧迫的问题)。基本上,拥有“域”字段会使设置 cookie 静默失败。删除它可能会解决问题,但由于它从未实施,我没有费心更新这篇文章。我发现另一个帖子提到了这一点:stackoverflow.com/a/34766660/1202995
  • 我必须使用域字段,以便我们拥有子域通配符,它​​与我的解决方案完美配合。我还发现我的节点服务器在 cookie 上设置了 Max-Age 属性,并且也将其删除以支持使用 Expires。
  • 您的域参数是什么样的?
  • .example.com 尽管它在没有尾随点的情况下同样有效,并且 RFC 说尾随点应该没有区别。

标签: http cookies microsoft-edge setcookie


【解决方案1】:

我找到了适合我的答案。

我们在客户端上使用 fetch。在一些较旧的浏览器中,本机 fetch 实现默认为 credentials: "omit",,而较新的浏览器默认为 credentials: "same-origin"

因此,添加此选项似乎允许 Edge 在 fetch 请求中接收 cookie,例如

fetch('/users', {
  credentials: 'same-origin'
})

https://github.com/github/fetch#sending-cookies 供参考。尽管标题的名称,“省略”将禁用发送和接收 cookie。

【讨论】:

    猜你喜欢
    • 2015-09-12
    • 2020-08-16
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    • 2018-10-26
    • 2019-11-12
    相关资源
    最近更新 更多