20

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

从 Chrome 80 开始

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

默认限制为第一方

Set-Cookie: cname=cvalue; SameSite=Lax

在第三方环境中允许

Set-Cookie: cname=cvalue; SameSite=None; Secure

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

从 Chrome 91 开始

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

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

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

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

更新

我试图通过使用服务器SameSite=None(仅限开发)来解决这个问题。这会导致不同的错误:Connection isn't secure. 这是因为在使用时SameSite=None需要添加后缀Secure,并且诅咒使用 HTTP S连接。安全连接有其自身的问题,例如必须为开发证书付费。

4

4 回答 4

5

解决方法:降级 Chrome

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

  • 卸载 Chrome 转到“添加或删除程序”并卸载 Chrome。请注意,cookies 和保存的浏览器密码等用户数据可能会丢失。
  • 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禁用标志
于 2021-06-06T12:02:55.330 回答
3

我找到了修复它并与大家分享的方法:-)

描述出现在问题部分:

如果 cookie 应在跨站点请求中发送,请指定 SameSite=None 和 Secure。这允许第三方使用。

在此处输入图像描述

在开发人员工具部分,转到应用程序选项卡,然后在左侧转到 Cookie:

您要与其他域共享的 cookie,标记安全检查并在 Samesite 中放置 None。在本地更新站点选项卡,您将能够使用允许您通过原始域发送的 cookie

在此处输入图像描述

我希望这能照亮你的一天

于 2021-07-01T11:30:43.930 回答
0

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

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

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

于 2021-06-03T16:04:19.553 回答
0

您可以在开发工具中手动将 SameSite 属性设置为“无”+勾选“安全”。

这样您就不必修改生产环境(将 cookie 保留为 SameSite=Lax)。

于 2021-06-08T11:29:06.847 回答