此 Set-Cookie 未指定“SameSite”属性,默认为“SameSite=Lax” - Localhost

Gil*_*ain 13 cookies google-chrome session-cookies samesite

我是一名前端开发人员,正在开发一个应用程序,其中login/响应在客户端上放置了一个 Session-Cookie。由于用户“登录”,稍后的请求将被授权。

从 Chrome 80 开始

所有没有 SameSite 属性的 cookie 都将被视为已SameSite=Lax指定。换句话说,它们将仅限于第一方(同一域中的服务器和客户端)。如果您需要第三方 cookie(不同域上的服务器和客户端),则它们必须标有SameSite=None.

默认限制为第一方

Set-Cookie: cname=cvalue; SameSite=Lax
Run Code Online (Sandbox Code Playgroud)

在第三方上下文中允许

Set-Cookie: cname=cvalue; SameSite=None; Secure
Run Code Online (Sandbox Code Playgroud)

对于我的应用程序,我想要默认行为。我的客户端和服务器在生产中运行在同一个域上。但在开发中,我正在localhost(不同的领域)工作。
到目前为止,chrome 在chrome://flags- SameSite 默认下有一个特殊的标志cookies。我可以在我的开发机器上启用这个标志并且登录通过了。在生产中,我不需要这个标志,因为我想要默认行为。

从 Chrome 91 开始

删除了默认情况下SameSite cookie标志。这意味着从这个版本开始,我无法登录我的应用程序,除非将其部署到生产环境中。

有谁知道如何在从本地主机工作时获取 Session-Cookie。但仍然保持SameSite=Lax. 如果可能,只对客户端进行更改,但如果需要,也可以对服务器进行更改。

Chrome DevTools - SameSite 错误消息 Chrome DevTools - SameSite 错误消息

Chrome 80 标志菜单 - 这些标志在 Chrome 91 中被删除 Chrome 80 标志菜单 - 这些标志在 Chrome 91 中被删除

Gil*_*ain 5

解决方法:降级 Chrome

这不是解决方案!对于像我这样的人来说,这只是一个临时解决方法,他的工作是如何因此更新而停止的。

  • 卸载 Chrome 转到“添加或删除程序”并卸载 Chrome。请注意,cookie 和保存的浏览器密码等用户数据可能会丢失。
  • slimjet.com或任何其他站点下载 Chrome v90。然后安装 Chrome。
  • 根据此StackOverflow解决方案,防止自动更新Chrome :
    打开C:\Program Files (x86)\Google\Update
    将文件重命名GoogleUpdate.exeGoogleUpdate2.exe.
    这将导致 Chrome 找不到更新包。
  • 更新标志- 打开 Chrome 并输入:chrome://flags
    搜索#same-site-by-default-cookies禁用标志


Ber*_*san 5

自 Chrome v107 起(2022 年 11 月)

我遇到了类似的问题,花了几个小时进行挖掘,我发现 Chrome 的唯一解决方案是确保前端连接安全,即https(例如使用代理):链接

另一种解决方案是使用Firefox并设置:about:config> network.cookie.sameSite.noneRequiresSecure=false。这允许SameSite=None; Secure=false

  • 事实上,我们的解决方案之一最终是使用“https”。我们只是不想为调试环境的证书付费。 (2认同)

小智 1

在我们的例子中,我们还可以在不同的端口上本地运行我们的服务器,并将我们的客户端应用程序指向该本地主机地址以进行开发。

例如,我在 上运行客户端应用程序localhost:1234,并将请求发送到在localhost:5678. 这可确保 cookie 成功设置,因为客户端和服务器现在是“SameSite”。

诚然,这可能更像是一种解决方法,而不是解决方案,但我希望它在短期内有所帮助。