即使在设置 SameSite=None 后,Safari 也不发送 cookie;安全的

Die*_*ime 33 javascript cookies safari setcookie samesite

我们的应用程序使用 cookie 来记住用户登录。我们进行的每个身份验证 API 调用,浏览器都会在 API 请求中附加服务器设置的 HTTPonly cookie 并进行身份验证。在 Mojave 发布后,这种行为似乎在 safari 中被打破了。

我阅读了 safari 和我们的服务器团队SameSite=None;Secure在设置 cookie 时添加的跨站点 cookie 安全性。即使在那之后,它仍然不起作用。

Set-Cookie: my_cookie=XXXXX; path=/; secure; HttpOnly; SameSite=None

请建议或提供来自实际找到解决方案的人的链接。

row*_*n_m 35

MacOS 10.14 上的 Safari 版本和 iOS 12 上的所有浏览器都受到此错误的影响,意味着它SameSite=None被错误地视为SameSite=Strict,例如最严格的设置。

我已经在SameSite cookie recipes 中发布了一些指南:

  • 使用两组 cookie 来说明支持SameSite=None; Secure和不支持的浏览器。
  • 为不兼容的浏览器嗅探用户代理,而不SameSite=None为这些请求提供服务。

  • 好主啊。过去三天刚刚和一位客户一起度过了,他从 PayPal 返回时经历了最糟糕的时间,因为 Cookie 似乎丢失了(因此没有会​​话可以继续购买)......而且他们使用的 Safari/webkit 比当前版本旧...... .这个问题准确地描述了问题。 (3认同)
  • 那么哪个 safari 版本有修复呢? (3认同)

Viv*_*vek 19

Safari 不再发送跨站点 cookie。因此,即使 cookie 设置为 SameSite=None,它也不会与第三方 ajax 请求一起发送。

要允许发送跨站点 cookie,请转至Safari > Preferences > Privacy并取消选中Prevent cross-site tracking

在此输入图像描述


waw*_*wka 13

这也是 Safari 14 中的一个问题。默认情况下,Safari 不再发送第三方 cookie。这是因为他们引入了隐私首选项:默认情况下打开的“防止跨站点跟踪”。因此,如果您设置 cookie,SameSite=None; Secure它们仍然不会被设置并发送到跨域。

  • 有什么解决方案/解决方法吗? (4认同)

Dav*_*rte 13

问题不在于 Safari 发送或不发送 cookie,而在于 Safari 不存储 cookie。这与 cookie 配置的特定组合有关,它与 localhost 的此设置一起使用

Set-Cookie: your=cookie; Domain=localhost; Path=/; Expires=Mon, 26 Dec 2022 12:53:02 GMT; HttpOnly; SameSite=Lax

以及产品的这个设置

set-cookie: your=cookie; Domain=something.com; Path=/; Expires=Thu, 22 Dec 2022 04:17:44 GMT; HttpOnly; Secure; SameSite=Lax

您需要Domain在您的产品(ssl)环境中包含 和Secure。您可以使用不同的值,SameSite但这Lax对我有用

  • 哇,伙计,我真的很感激我能看到你的答案。你确实救了我的命。在过去的两天里,我一直在努力解决这个问题,我尝试了很多方法,但似乎找不到任何解决方案,直到找到你的答案。我很欣赏像你这样的人!:) (2认同)