0

我在 PHP 中有一个部分继承的 Web 应用程序,在使用 Fiddler 进行探索之后,我拥有比以前更多的数据。我要解决的问题是在 IE6/8 上不需要注销,但不是 FF/Chrome。如果用户在不同页面之间点击,登录数据 cookie 就会消失。

FF 与 IE 的行为不同,Fiddler(/IE) 和 Live HTTP Headers(/FF) 报告的信息几乎完全相同。

在 Firefox 中,cookie 似乎被视为 PHP 指定的那样:它们是在用户登录并选中“记住我”时创建的,并且只有在用户访问注销页面时才会被删除,并且它们有两周的到期日期。实时 HTTP 标头报告没有什么不同:当用户在页面之间单击时,cookie 永远不会被报告为被更改或删除。

但是在 IE 中,当用户在不同页面之间单击时它们会消失,并且 Fiddler 会报告,

Cookies / 登录
    设置 Cookie:*******=已删除;expires=星期日,2008 年 6 月 29 日 21:07:46 GMT;路径=; 域=.********.com
    设置 Cookie:*******=已删除;expires=星期日,2008 年 6 月 29 日 21:07:46 GMT;路径=; 域=.********.com

('deleted' 字面意思是从 Fiddler 的输出中引用的。我的代码中没有任何地方将任何一个值设置为 'deleted' 的魔术字符串。)

不仅 IE 和 Firefox 对网站的表达方式有不同的解释,而且 Fiddler 和 HTTP Live Headers 也相应地报告了网站行为的不同版本。

IE 和“已删除”有什么特别之处吗?这听起来可能很奇怪,但 IE 是否希望在每次页面查看时重新启用 cookie 或类似的东西?

除非用户通过访问注销 URL 请求它,否则我怎样才能安抚 IE 以保佑有问题的 cookie 未被服务器删除?

4

3 回答 3

3

我最终发现如下:Firefox 和 IE 的行为不同,因为当丢失的文档在 14 天内过期时,它们处理缓存的方式不同:已设置的标头。

Firefox 显然检查了一次丢失的数据,然后不再请求它。

另一方面,IE 继续检查样式表给出错误路径的项目,得到 404 页面,并且自定义 404 页面做了一个样板邀请登录,触发用户被注销(也许不是最好的样板)。我猜样式表被缓存了,但是 IE 一直在询问丢失的项目。

所以它是缓存差异加上间接包含加上 404 页面行为。

我仍然不知道“删除”是什么来的。(如果您将 cookie 字符串设置为空值,PHP 是否提供“已删除”一词?)

于 2009-07-02T21:41:47.267 回答
2

如果主机中有下划线,IE 不会设置 cookie,但这不是问题所在。

Fiddler 没有“发明”任何东西——如果它说它有一个 HTTP 标头将 cookie 设置为“已删除”的值,这意味着服务器确实发送了它。

您可能想看看是否有任何错误的请求在线路上发出,导致服务器删除 cookie。例如,在另一个线程中,有人注意到带有“”(空字符串)来源的 IMG 标记会导致 IE 发送对站点根目录的请求,并且如果访问了他们的主页,则会删除登录 cookie。

IE6/7/8 目前每台主机的 cookie 限制为 50 个,但这也不是您在这里要达到的。

于 2009-07-02T03:50:23.977 回答
1

相关页面的 URL 中是否有下划线?我记得 IE 对来自不遵循域名规范的域名的 cookie 有问题(RFC 1035检查第 2.3.1 节)。

IE 中也有(在哪里?)关于 cookie 大小和每个域的 cookie 数量的一些限制。在 IE6 中,我认为限制是每个域 4095 字节和每个域 20 个 cookie 的所有 cookie 的最大大小。

如果您使用基于标头的重定向,IE 可能会丢失对 cookie 的跟踪,也可能会出现问题。

顺便提一句。您在两个 Set-Cookie 指令中提供的日期是它们来自旧日志还是服务器是否真的设置了具有过去过期日期的 cookie(这是通常的说法......“嘿浏览器删除这个 cookie几天前已经过期”)

于 2009-07-01T21:59:44.117 回答