【问题标题】:Cookie “cookieName” will be soon rejected because it has the “sameSite” attribute set to “none” or an invalid value on clearCookieCookie“cookieName”将很快被拒绝,因为它的“sameSite”属性设置为“none”或 clearCookie 上的值无效
【发布时间】:2020-12-21 01:04:03
【问题描述】:

为了设置 cookie,我有一个包含以下代码的 express API:

...
res.setHeader("Access-Control-Allow-Origin", ip);
res.cookie(name, token, { maxAge: 30000, httpOnly: true, secure: false, sameSite: "Lax" });
...

还有这个清除cookie:

...
res.clearCookie(name);
...

当我执行第二个时,我收到以下错误消息: Cookie“cookieName”将很快被拒绝,因为它的“sameSite”属性设置为“none”或 clearCookie 上的值无效

一些细节:

  • 该错误仅在 Firefox 中显示,在 Chrome 中不显示。
  • 在设置 sameSite: "Lax" 之前,我收到了两次错误消息,在设置 cookie 之后以及清除它时。将sameSite设置为Lax后,只有在清除cookie时才会出现问题。

有什么帮助吗?如果您需要更多详细信息、版本、代码,请告诉我...

【问题讨论】:

  • 代码是什么样的?

标签: express firefox cookies


【解决方案1】:

您正面临 HTTP 问题。一般规则,设置或删除 cookie,您必须将所有参数设置为相同(值和过期时间除外)。答案https://stackoverflow.com/a/20320610/941493RFC 6265 中描述了您的问题的正确解决方案。

最后,要删除 cookie,服务器会返回一个 Set-Cookie 标头,其中包含过去的过期日期。仅当 Set-Cookie 标头中的 Path 和 Domain 属性与创建 cookie 时使用的值匹配时,服务器才能成功删除 cookie。

也写在clearCookie的文档中:

Web 浏览器和其他兼容客户端仅在给定选项与 res.cookie() 提供的选项相同时才会清除 cookie,不包括 expires 和 maxAge。

因此,在您的情况下,过去使用expiresclearCookie 调用cookie 命令,使用与创建cookie 相同的参数。

【讨论】:

    【解决方案2】:

    cookie 和 clearCookie 需要相同的参数。

        res.clearCookie(name, { maxAge: 30000, httpOnly: true, secure: false, sameSite: "Lax" })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-18
      • 2020-12-20
      • 2020-05-17
      • 2021-01-11
      • 1970-01-01
      • 2020-11-12
      • 1970-01-01
      • 2020-05-01
      相关资源
      最近更新 更多