【问题标题】:Problem with cookie expiration set to 0 in IE8IE8中cookie过期设置为0的问题
【发布时间】:2010-10-12 13:19:27
【问题描述】:

我发现 IE8 存在一个相当大的问题,即将 cookie 过期时间设置为 0(以便在用户关闭浏览器时将其注销)。似乎每个新选项卡或窗口都被计为一个新会话,因此如果用户在新选项卡/窗口中打开站点上的页面,他们必须再次登录,除非他们选择保持登录的选项,这使得cookie 持久且不会导致任何问题。必须有一种方法可以使这项工作像过去那样工作,并且在过去一直没有强迫我的用户即使在关闭浏览器后仍保持登录状态。如果重要的话,我会像这样从 pHP 设置 cookie:

setcookie("username",$username,0," ",".example.com");

【问题讨论】:

  • 你看过Set-Cookie的实际样子了吗?
  • 你的意思是它实际上是什么样子的?

标签: php cookies internet-explorer-8


【解决方案1】:

问题可能是路径字段中的空格。此属性应未指定或应为有效路径,如 /home。尝试指定一个空字符串 ('') 而不是空格。

也可能是一个缓存的东西,即登录页面可能看起来未经身份验证,因为内容已被缓存。 php 中的 session_cache_limiter('nocache') 将指示浏览器不要缓存任何内容(使用会话时),这与设置相同:

Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache

要省略路径,您可以将 ''(空字符串)或 null 传递给该参数的 setcookie。或使用“/”之类的东西来表示整个网站。

ie8 窗口和选项卡共享同一个会话,除非用户选择“文件 -> 新会话”或显式运行 iexplore.exe -nomerge。

【讨论】:

  • 这不是缓存问题。就像我说的,IE8 将每个选项卡/窗口解释为一个新会话,因此只有持久性 cookie 会被保留。同样很明显,缓存不是问题,因为我重定向到登录页面(在 URL 中包含您来自的页面),无论 URL 是什么,它都会这样做。
  • 我刚刚运行 HTTP Spy 并在一个页面上登录,并且所有 cookie 都正确显示。然后我从该页面打开一个链接(该链接在 URL 中包含一个随机数以破坏缓存)并将其重定向到登录页面。 HTTP Spy 未显示其他选项卡中显示的任何登录 cookie。
  • 顺便说一句,这不仅仅是我的特定设置的一些问题。我收到了来自用户的电子邮件,我已经在多台计算机上进行了尝试,结果相同。
  • ie8 窗口、选项卡和弹出窗口默认属于同一个会话,因此它们不是孤立的上下文。至于缓存,如果没有禁用缓存,即会缓存响应(例如,再次浏览到 /home 或 /login 可能不会显示当前用户,但这完全取决于应用程序的构建方式和测试场景是什么) .要检查的另一件事是使用 http spy 来验证 cookie 数据是否包含预期值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
  • 1970-01-01
  • 1970-01-01
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
  • 2012-03-12
相关资源
最近更新 更多