无法删除 cookie - Firefox 拒绝过去的 cookie

问题描述 投票:0回答:3

我在这里失去了理智 - 我正在调查一个问题,我拥有的应用程序中的某些注销功能无法正常工作,因为身份验证 cookie 未被清除。问题是我们的“注销”端点确实在响应中包含适当的

set-cookie
标头-这是我在Firefox中查看原始响应的内容:

set-cookie: Auth.myapp=; domain=app.mydomain.com; expires=Thu, 26-Nov-2020 13:19:20 GMT; path=/; secure; HttpOnly

Firefox 在控制台中报告此错误:

Cookie “Auth.myapp” 已被拒绝,因为它已经过期

这有点令人困惑,不仅我之前在

set-cookie
中成功地使用了带有过去日期的
expires
,它甚至被编入了 RFC6265 作为请求客户端删除 cookie 的可接受方式:

最后,要删除一个 cookie,服务器返回一个 Set-Cookie 标头 过期日期。服务器将成功 仅当 Path 和 Domain 属性在 Set-Cookie 标头匹配 cookie 时使用的值 已创建。

所以我需要设置一个

expires
过去的日期来清除cookie ...但是这样做会导致浏览器拒绝它吗?有谁知道这里发生了什么?

明确地说,我已经检查了 cookie 名称、路径、

secure
SameSite
匹配(更新:我怀疑因为我没有明确指定 SameSite 这可能是原因,但在确保 cookie 是用
SameSite=None
设置和清除它仍然不起作用)。

firefox cookies setcookie
3个回答
10
投票

据我所知,该消息是无害的——根据我的测试,cookie 确实被删除了。谷歌搜索消息导致this changeset,这表明删除确实发生了,只是有额外的日志记录。

       // If the new cookie has expired -- i.e. the intent was simply to delete
       // the old cookie -- then we're done.
       if (aCookie->Expiry() <= currentTime) {
         COOKIE_LOGFAILURE(SET_COOKIE, aHostURI, aCookieHeader,
                           "previously stored cookie was deleted");
+        CookieLogging::LogMessageToConsole(
+            aCRC, aHostURI, nsIScriptError::warningFlag,
+            CONSOLE_REJECTION_CATEGORY, "CookieRejectedExpired"_ns,
+            AutoTArray<nsString, 1>{
+                NS_ConvertUTF8toUTF16(aCookie->Name()),
+            });
         NotifyChanged(oldCookie, u"deleted", oldCookieIsSession);
         return;

该消息似乎是不必要的,并且有 错误报告 关于它。错误报告最近已更新,注意到这已在 Firefox 114 中修复。


3
投票

在 cookie 值中使用 null 、 false 或空字符串时会发生这种情况。 它仅在 Firefox 中被标记为警告。 其他浏览器不显示此警告。


1
投票

我今天遇到了类似的问题,错误消息与 OP 相同。

这发生在过去,我的解决方案是,我没有设置过去的时间,而是将值设置为空(作为故障保护),并将“过期”设置为

'time() + 1'
(所以未来的时间与 cookie几乎立即过期)。

    setcookie('cookiename','',[
        'expires' => time() + 1,
        'path' => '/',
        'domain' => $_SERVER['HTTP_HOST'],
        'secure' => true,
        'samesite' => 'strict'
        ]);

不幸的是,这个变通办法今天似乎突然失败了,而那个失败does似乎是Firefox独有的。 (所以,是的,也许是 FF 错误?)

Chrome 和 Vivaldi 仍然可以正常使用它。我还没有在 Safari 和 Edge 上测试过。

© www.soinside.com 2019 - 2024. All rights reserved.