即使指定了 samesite=none,浏览器也会使用 samesite=lax

Browser uses samesite=lax even if samesite=none is specified

我正在尝试通过 iframe 将我的 angular 应用程序嵌入到另一个站点。在我的 angular 应用程序中,我正在设置 cookie,因此当我尝试将 angular 应用程序嵌入到我的其他站点时,Devtools 显示了一个问题,告诉我 samesite=none 不是t 设置以便使用默认的 samesite=lax,这会阻止 angular 应用程序设置 cookie。

之后我尝试在响应头中设置条目“set-cookie: samesite=none; secure”,但没有成功。正如您在下面的屏幕截图中看到的,浏览器仍然使用“same-site=lax”。

此问题发生在 Chrome 和 Edge(Chromium) 上,但不会发生在 Firefox 上。

问题:

截图:

问题

您误解了 Set-Cookie 的语法,并且错误地省略了 cookie 的名称和值。查看 the MDN page on the topic:

A cookie definition begins with a name-value pair.

因此,当浏览器收到带有以下内容的响应时 header,

set-cookie: samesite=none; secure

它创建(或更新)一个 Secure cookie,其 namesamesitevaluenone。由于未指定 SameSite 属性 并且由于 Chromium now defaults to Lax for the SameSite attribute,生成的 cookie 被您的浏览器有效地标记为 SameSite=Lax

解决方案

要解决此问题,您必须为 cookie 选择名称和值,并且必须在任何其他 cookie 属性之前指定 cookie 的名称和值:

Set-Cookie: <cookie-name>=<cookie-value>; SameSite=None; Secure