Php 为什么IE/Fiddler会从Chrome和FF/Live HTTP头中看到不同的cookie设置/删除?

Php 为什么IE/Fiddler会从Chrome和FF/Live HTTP头中看到不同的cookie设置/删除?,php,internet-explorer,session,cookies,fiddler,Php,Internet Explorer,Session,Cookies,Fiddler,我有一个部分继承了PHP的web应用程序,在使用Fiddler之后,我得到的数据比以前多一点。我试图解决的问题是IE6/8上不需要的注销,而不是FF/Chrome。如果用户在不同页面之间单击,则登录数据cookie将消失 FF和IE的行为不同,报告的信息在Fiddler(/IE)和Live HTTP头(/FF)之间几乎完全相同 在Firefox中,Cookie看起来像PHP指定的那样:它们是在用户登录并选中“记住我”时创建的,只有在用户访问注销页面时才会删除,并且它们有两周的过期日期。Live

我有一个部分继承了PHP的web应用程序,在使用Fiddler之后,我得到的数据比以前多一点。我试图解决的问题是IE6/8上不需要的注销,而不是FF/Chrome。如果用户在不同页面之间单击,则登录数据cookie将消失

FF和IE的行为不同,报告的信息在Fiddler(/IE)和Live HTTP头(/FF)之间几乎完全相同

在Firefox中,Cookie看起来像PHP指定的那样:它们是在用户登录并选中“记住我”时创建的,只有在用户访问注销页面时才会删除,并且它们有两周的过期日期。Live HTTP头报告没有什么不同:当用户在页面之间单击时,Cookie从不报告为已更改或删除

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

Cookies / Login Set-Cookie: *******=deleted; expires=Sun, 29-Jun-2008 21:07:46 GMT; path=; domain=.********.com Set-Cookie: *******=deleted; expires=Sun, 29-Jun-2008 21:07:46 GMT; path=; domain=.********.com Cookies/登录 设置Cookie:*******=已删除;expires=太阳,2008年6月29日21:07:46格林威治标准时间;路径=;域=*********.com 设置Cookie:*******=已删除;expires=太阳,2008年6月29日21:07:46格林威治标准时间;路径=;域=*********.com (“deleted”是从Fiddler的输出中逐字引用的。我的代码中没有任何地方将任何一个值设置为神奇的“deleted”字符串。)

IE和Firefox不仅对该网站的说法有不同的解释,而且Fiddler和HTTP Live Headers也相应地报告了该网站的不同版本

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


我如何才能安抚IE,使其认为除非用户通过访问注销URL请求,否则服务器不会删除相关cookie?

相关页面的URL中是否有下划线?我记得IE对来自域名的cookie存在问题,这些cookie不符合域名规范(请参阅第2.3.1节)

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

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


顺便说一句,您在两个Set-Cookie指令中提供的日期是来自旧日志还是服务器真的设置了一个过去有过期日期的Cookie(这是说“嘿,浏览器删除这个Cookie,因为它已经过期几天了”)

相关页面的URL中有下划线吗?我记得IE对来自域名的cookie存在问题,这些cookie不符合域名规范(请参阅第2.3.1节)

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

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


顺便说一句,您在两个Set-Cookie指令中提供的日期是来自旧日志还是服务器真的设置了过去过期的Cookie(这是通常说的…“嘿,浏览器删除此Cookie,因为它已经过期几天了”)

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

Fiddler并没有“发明”任何东西——如果它说它得到了一个HTTP头,将cookie设置为“deleted”值,这意味着服务器确实发送了这个值

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


IE6/7/8目前每个主机有50个cookie的限制,但这也不是您在这里遇到的问题。

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

Fiddler并没有“发明”任何东西——如果它说它得到了一个HTTP头,将cookie设置为“deleted”值,这意味着服务器确实发送了这个值

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


IE6/7/8目前每台主机有50个cookie的限制,但这也不是您在这里要讨论的问题。

我最终发现的是:Firefox和IE表现不同,因为当丢失的文档在14天内过期时,它们对缓存的处理方式不同:设置了标题

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

另一方面,IE不断检查样式表给出的错误路径的项目,得到404页,自定义404页做了一个模板邀请登录,触发用户注销(可能不是最好的模板)。我猜样式表是缓存的,但IE一直在请求缺少的项

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


我还是不知道“删除”是从哪里来的。(如果将cookie字符串设置为空值,PHP会提供“deleted”一词吗?

我最终发现如下:Firefox和IE的行为不同,因为它们对待cachi