一般来说,当给定一个没有过期时间的cookie时,现代浏览器会将此cookie视为“会话cookie”,他们会在浏览会话结束时删除cookie(通常在浏览器实例关闭时)
IE,Opera,Safari和Chrome都支持此行为。
然而,firefox(3.0.9最新正确版本)似乎不遵循此规则,我可以告诉它在浏览器关闭时,或者当用户注销或重新启动操作系统时不会使cookie过期。
那么,为什么firefox将它们称为会话cookie,当它们无限期地持续存在时呢?
有谁知道Firefox如何处理会话cookie过期?
答案 0 :(得分:110)
这显然是设计上的。看看这个Bugzilla错误: https://bugzilla.mozilla.org/show_bug.cgi?id=443354
Firefox具有关闭Firefox的功能,它可以保存所有选项卡,然后您还原浏览器并返回这些选项卡。那叫做会话恢复。我没有意识到它也将恢复这些页面的所有会话cookie!它就像你从未关闭浏览器一样对待它。
这在某种意义上是有道理的,如果你的浏览器崩溃了,你就会回到原来的位置,但对于用于会话cookie的web开发者来说,这有点令人不安。几个月前我有一些旧的会话cookie,这些cookie是由我总是在标签中打开的网站设置的。
要对此进行测试,请关闭浏览器中的所有选项卡,然后关闭浏览器并重新启动它。在这种情况下,我认为您网站的会话Cookie应该清除。否则你必须关闭会话恢复。
答案 1 :(得分:5)
两个想法:
答案 2 :(得分:3)
这应该有效。我曾经是cookie模块测试人员之一,我认为没有任何设计理由会有不同的行为(尽管如果你崩溃了,会话cookie 可能被设计为在你的时候生活重新启动...)
您是否正在“首选项”菜单中查看Cookie> “隐私”标签> “显示Cookie ...”按钮?
另外,您是否尝试过新的个人资料?
答案 3 :(得分:1)
这是共享用户环境中的一个问题。如果我设置了一个在会话结束时设置为过期的身份验证cookie。在浏览器关闭并且另一个用户启动Firefox后,这将在Firefox中持续存在。由于某种原因,Cookie设置了有效期!
答案 4 :(得分:1)
我不同意上面的meandmycode。
HTTP规范https://www.ietf.org/rfc/rfc6265.txt讨论了客户端应该如何处理带有Expires的Set-Cookie标头:
如果服务器希望用户代理将cookie保留在多个"会话" (例如,用户代理重新启动),服务器可以在Expires属性中指定到期日期。请注意,如果用户代理的cookie存储超过其配额,或者用户手动删除服务器的cookie,则用户代理可能会在到期日期之前删除cookie。
这个的逻辑扩展是服务器必须要求浏览器在退出时不维护Cookie的唯一方法是不设置Expires值(即会话cookie)。如果浏览器不尊重该语义,那么它就不尊重服务器的响应。
基本上,用户代理决定忽略服务器请求,并且就像设置了Expires值一样。
答案 5 :(得分:1)
就我而言,这是因为固定标签页自动恢复了会话,即使在Firefox设置中禁用了此选项也是如此。因此,如果取消固定选项卡,则将无法恢复会话。
答案 6 :(得分:0)
我很困惑Mozilla已经离开了这几年了。
好的..所以我退出FF并关闭电脑。 第二天FF启动并打开最后一组页面(非常方便的功能)但是它会恢复会话并且我重新登录到没有“保存我的设置”功能的站点。 我知道,因为它们是我建造的网站。 无论我使用php ini设置做什么,都会恢复会话。
他们绝对不应该恢复。 页面是,但cookie ini的会话设置为'0'否。
我不明白为什么这不会被标记为安全漏洞。 当然,我可以在服务器端进行一些额外的检查,根据上次登录的时间查看是否应该允许登录,但不应该需要。
会话不应该持续存在。 FF正在操纵cookie到期设置。
答案 7 :(得分:-1)
这对我来说很令人不安。我的系统已设置好,以便用户可以点击EXIT,从而销毁所有会话cookie。但是如果用户在没有实际选择退出的情况下关闭浏览器,我希望会话cookie被清除。
我实际上是使用Google Chrome,IE 9测试过的,并且运行正常。但Firefox不愿意杀掉这个“会话”(由Firebug报道)cookie。
确定。这就是我做的。我选择退出FireFox主菜单,从那时起,按预期做得很好(不知道为什么)。