Firefox 会话 cookie

一般来说,当给定一个没有过期期限的 cookie 时,现代的浏览器会认为这个 cookie 是一个“会话 cookie”,他们会在浏览会话结束时删除这个 cookie (通常是在浏览器实例关闭时)。

IE、 Opera、 Safari 和 Chrome 都支持这种行为。

However firefox (3.0.9 latest proper release) appears not to follow this rule, from what I can tell it doesn't expire the cookies when the browser is closed, or when the user logs off or restarts the OS..

那么,为什么 Firefox 称这些为会话 cookie,而它们显然是无限期的?

有人知道 Firefox 是如何处理会话 cookie 过期的吗?

76499 次浏览

这个应该可以。我曾经是 cookie 模块测试人员之一,我认为没有任何设计上的原因会导致它的行为有所不同(尽管如果你崩溃了,会话 cookie 也许吧会被设计成在你重新启动时继续存在... ...)

Are you viewing the cookies in the "Preferences" menu > "Privacy" Tab > "Show Cookies..." button?

还有,你试过新资料了吗?

两个想法:

  1. 您的会话管理器有问题(包含在 FF3或扩展中的会话管理器,比如 tabmix plus)
  2. 使用 Firebug + FireCookie (https://addons.mozilla.org/en-US/firefox/addon/6683)来调试!

这显然是设计好的,看看这个 Bugzilla bug: https://bugzilla.mozilla.org/show_bug.cgi?id=443354

Firefox 有一个功能,你关闭 Firefox,它会提供保存你所有的标签页,然后你恢复浏览器,这些标签页就会回来。这叫会话恢复。我没有意识到的是,它还将恢复所有会话饼干的那些网页了!就像你从没关过浏览器一样。

从某种意义上说,如果你的浏览器崩溃了,你就会回到原来的位置,但是对于那些习惯于清除会话 cookie 的 web 开发人员来说,这有点令人不安。我有一些几个月前的会话 cookie,它们是由我经常打开的标签页网站设置的。

要测试这一点,请关闭浏览器中的所有选项卡,然后关闭浏览器并重新启动它。在这种情况下,您站点的会话 cookie 应该被清除。否则就必须关闭会话恢复。

在共享用户环境中,这有点令人担忧。如果我设置了一个身份验证 Cookie,它将在会话结束时过期。当浏览器关闭并且另一个用户启动 Firefox 后,这将在 Firefox 中持续存在。饼干设置有一个有效期是有原因的!

这让我很不安。我的系统已经设置好了,用户可以点击 EXIT,然后我销毁所有的会话 cookie。但是如果用户关闭浏览器而没有选择退出,我希望会话 cookie 被清除。

我实际上用谷歌 Chrome,IE9测试过,运行良好。但是 Firefox 不愿意关闭这个“ session”cookie (据 Firebug 报道)。

好的。我就是这么做的。我选择了退出从火狐主菜单,从那时起,做得很好,因为预期(不知道为什么)。

我感到困惑的是,Mozilla 已经离开这样的状态好几年了。

好吧. . 所以我退出 FF 和关闭电脑。 第二天 FF 启动并打开最后一组页面(非常方便的功能) ,但是它恢复了会话,并且我重新登录到没有“保存我的设置”功能的站点。 我知道是因为这些网站都是我建的。 Whatever I do with php ini settings the sessions are restored.

它们绝对不应该被修复。 页面是,但是 Cookie ini 会话设置为“0’no”。

我不明白为什么这里没有被标记为安全漏洞。 当然,我可以在服务器端做一些额外的检查,看看是否应该允许登录,基于上次登录的时间,但它不应该是必要的。

会话不应该持续。 FF 正在操纵 Cookie 的有效期设置。

我不同意上面的代码。

HTTP 规范 https://www.ietf.org/rfc/rfc6265.txt讨论了客户端应该如何处理带有过期的 Set-Cookie 头:

如果服务器希望用户代理在多个“会话”(例如,用户代理重新启动)中持久存储 cookie,服务器可以在 Exires 属性中指定一个过期日期。请注意,如果用户代理的 Cookie 存储超过其配额,或者如果用户手动删除服务器的 Cookie,则用户代理可能会在到期日之前删除 Cookie。

逻辑上的扩展是,服务器要求浏览器在退出时不维护 Cookie 的唯一方法是不设置 Exires 值(即会话 Cookie)。如果浏览器不尊重这种语义,那么它就不尊重服务器的响应。

Essentially the user agent is deciding to ignore the server request and act as if an Expires value had been set.

在我的例子中,是因为 pinned tabs自动恢复了会话,即使这个选项在 Firefox 设置中被禁用。因此,如果您解除标签,会话将不会恢复。