【问题标题】:Should a web browser delete all `session' (expiry = 0) cookies on exit?网络浏览器是否应该在退出时删除所有“会话”(到期 = 0)cookie?
【发布时间】:2011-11-13 20:04:37
【问题描述】:

我读到的关于 cookie 的所有内容都表明,将 cookie 的到期时间设置为零应该使其成为“会话”cookie,然后浏览器将在退出时将其删除。

http://www.cookiecentral.com/faq/ 说:

“...通常会话是浏览器打开的时间长度...”

http://php.net/manual/en/function.setcookie.php 说:

“如果设置为 0 或省略,cookie 将在会话结束时(浏览器关闭时)过期。”

但是,在 Firefox (3.0.8) 中的一些实验表明:

  • 设置为会话和安全的 cookie 在退出时被删除
  • 设置为会话的 cookie不会在退出时被删除

Opera (9.64) 的行为与我预期的一样,无论是否设置为安全,都会在退出时删除会话 cookie。

我希望能够在我正在开发的网络应用程序中依赖它(将安全 cookie 和不安全 cookie 作为“登录”标志并让它们一起过期,或者实时或 0 表示会话),但似乎即使它在标准中,浏览器也不够一致,无法依赖它:/

这是浏览器中的错误、预期行为和/或会话 cookie 的实际生命周期没有在标准中真正定义吗?

【问题讨论】:

    标签: session cookies browser


    【解决方案1】:

    您永远不应依赖客户端功能。

    您正在开发的功能通常是在客户端存储会话 ID 和服务器端的真实用户信息(其 ID、他是否登录、他的个人信息等)。

    还请记住,cookie 会在每个请求中发送,因此您在 cookie 中存储的越少越好。

    【讨论】:

    • 请注意,“从不依赖”并不意味着您不能尝试利用客户端功能。设置 cookie 过期时间,因为它应该可以工作,但要完全确保您的服务器端代码处理旧的、无效的 cookie。
    • 完全同意dwc。您可以利用客户端功能;只是不要认为每个用户和每个请求都可以使用它们。
    • 这是我完全错过的非常重要的一点。假设过期在所有浏览器中都适用,总是会给我这个问题。我想我必须找到另一种方法来做到这一点......直到现在它看起来很优雅:/
    猜你喜欢
    • 2014-02-21
    • 1970-01-01
    • 2015-07-03
    • 2015-06-28
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    相关资源
    最近更新 更多