我是一名前端开发人员,正在开发一个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 80 标志菜单 - 在 Chrome 91 中删除了这些标志
更新
我试图通过使用服务器SameSite=None
(仅限开发)来解决这个问题。这会导致不同的错误:Connection isn't secure
. 这是因为在使用时SameSite=None
需要添加后缀Secure
,并且诅咒使用 HTTP S连接。安全连接有其自身的问题,例如必须为开发证书付费。