Firefox 会话 cookie

Posted

技术标签:

【中文标题】Firefox 会话 cookie【英文标题】:Firefox session cookies 【发布时间】:2010-10-21 03:17:00 【问题描述】:

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

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

但是,Firefox(3.0.9 最新的正确版本)似乎没有遵循此规则,据我所知,当浏览器关闭或用户注销或重新启动操作系统时,它不会使 cookie 过期。

那么,为什么 Firefox 将它们称为会话 cookie,而它们显然无限期地存在?

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

【问题讨论】:

我认为这实际上没有得到回答。我也看到了。 感谢 BRH 的研究,我确实看到了您的回复,并打算在标记答案之前检查您的研究,完全忘记了!道歉 【参考方案1】:

这显然是设计使然。查看这个 Bugzilla 错误: https://bugzilla.mozilla.org/show_bug.cgi?id=443354

Firefox 有一个功能,您可以关闭 Firefox 并保存所有选项卡,然后您恢复浏览器并返回这些选项卡。这称为会话恢复。我没有意识到它还会恢复这些页面的所有会话 cookie!它会将其视为您从未关闭过浏览器。

从某种意义上说,如果您的浏览器崩溃,您可以立即回到原来的位置,这是有道理的,但对于习惯于清除会话 cookie 的网络开发人员来说,这有点令人不安。我有一些几个月前的旧会话 cookie,它们是由我总是在标签页中打开的网站设置的。

要对此进行测试,请关闭浏览器中的所有选项卡,然后关闭浏览器并重新启动它。我认为在这种情况下应该清除您网站的会话 cookie。否则你必须关闭会话恢复。

【讨论】:

我觉得这种行为很值得怀疑,感谢您的研究。如果选择“保存并退出”或“恢复选项卡和窗口”,则在关闭浏览器时,所有会话 cookie 保持不变。 “用户”摆脱它们的唯一方法是首先关闭选项卡并然后关闭浏览器。 您找到解决方法了吗?我真的不希望 Firefox 挖掘旧会话,因为我需要我的应用程序中的会话 ID 是唯一的。 抱歉,我不知道解决方法。从您的应用的角度来看,他们的浏览器从未关闭过。 我已经注意到这个(IMO 不明智的)决定的一些影响:mrclay.org/index.php/2010/05/02/… 我今天也被这种行为所困扰。我认为我的应用程序有问题。然后我测试了 Chrome 和其他浏览器,然后发现 firefox 是罪魁祸首。【参考方案2】:

两个想法:

    您的会话管理器有问题(FF3 中包含的一个或扩展程序中包含的一个,例如 tabmixplus) 使用 Firebug + FireCookie (https://addons.mozilla.org/en-US/firefox/addon/6683) 调试!

【讨论】:

【参考方案3】:

这应该可行。我曾经是 cookie 模块测试人员之一,我不认为有任何设计原因会导致不同的行为(尽管如果您崩溃,会话 cookie 可能被设计为在您重启...)

您是否在“首选项”菜单 >“隐私”选项卡 >“显示 Cookie...”按钮中查看 Cookie?

另外,您是否尝试过新的个人资料?

【讨论】:

很奇怪,如果这只是我测试过的两个系统的一个错误,我会比较高兴。我查看了 cookie,它们在任何情况下都可以存活。而且它们绝对被分类作为firefox的会话cookie..我在firefox中更改的唯一选项是关闭和打开javascript..我安装的插件是firebug和Web开发人员工具栏..啊-无论如何都干杯。 还有各种 cookie 模块首选项,但我不记得它们中的任何一个具有这种功能。 FF3 确实从文本文件切换到了 cookie 数据库,可能是你的数据库行为不端。【参考方案4】:

我不同意上面的meandmycode。

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

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

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

本质上,用户代理决定忽略服务器请求并像设置了 Expires 值一样行事。

【讨论】:

【参考方案5】:

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

【讨论】:

好吧,公平地说,“Cookie 设置了到期日期是有原因的”——在这种情况下,您没有设置到期日期,因此由浏览器决定多长时间该 cookie 持续存在。【参考方案6】:

我很困惑 Mozilla 多年来一直保持这种状态。

好的..所以我退出了FF并关闭了PC。 第二天 FF 启动并打开最后一组页面(非常方便的功能),但它恢复了会话,我重新登录到没有“保存我的设置”功能的网站。 我知道,因为它们是我建立的网站。 无论我用 php ini 设置做什么,会话都会恢复。

绝对不应该恢复它们。 页面是的,但是将 cookie ini 设置为“0”的会话没有。

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

会话不应持续存在。 FF 正在操纵 cookie 过期设置。

【讨论】:

【参考方案7】:

在我的例子中,即使在 Firefox 设置中禁用了此选项,固定标签也会自动恢复会话。因此,如果您取消固定选项卡,会话将不会恢复。

【讨论】:

请附上示例或图片演示来详细说明您的解决方案!【参考方案8】:

这让我感到不安。我的系统已设置好,用户可以点击 EXIT,从而我销毁所有会话 cookie。但是,如果用户在没有实际选择退出的情况下关闭浏览器,我希望清除会话 cookie。

我实际上用谷歌浏览器、IE 9 对其进行了测试,并且运行良好。但是 Firefox 不愿意终止这个“会话”(由 Firebug 报告)cookie。

好的。这就是我所做的。我从 FireFox 主菜单中选择了退出,从那时起,它按预期进行(不知道为什么)。

【讨论】:

以上是关于Firefox 会话 cookie的主要内容,如果未能解决你的问题,请参考以下文章

会话无法在 chrome 中工作并在 Firefox 中工作

如何修复 SessionNotCreatedException:尝试运行 Firefox 时无法创建新的远程会话?

多么接近并打开相同的浏览器会话firefox或chrome扩展

在 Firefox/Chrome 上打开新标签页或窗口时,如何获得新的浏览器会话?

(转)FIDDER教程

查看php会话变量