为什么cookies会在IE6 / 8中消失,我该怎么办呢?

时间:2009-06-29 20:08:03

标签: php internet-explorer session cookies

我在一个站点上设置了一个登录设置,用于在PHP的$ _SESSION中存储登录信息,如果选中了复选框,还会设置一个带有登录信息的两周cookie。如果POST提交了有效的登录信息或者cookie为true,则认为用户已登录。

FF3 / Chrome上的行为符合预期,至少选中了“记住我”复选框:在您被视为已登录的网站上的任意位置登录。

但是,有人使用IE6说,她登录了一个地方,点击了链接到该网站其他部分的链接,并被要求再次登录。我的(多个IE)IE6遇到了一些麻烦,但我在IE8上重现了类似的行为,包括设置高级隐私设置 - >总是允许会话cookie,否则设置cookie权限尽可能宽容。行为是相同的:以一种应该设置_SESSION和两周cookie的方式登录一个地方,点击指向另一个页面的链接,然后页面会显示登录屏幕,因为它无法识别您登录PHP在Gentoo服务器上是5.2.8。

获取认可Cookie的任何建议或资源?

-

[在与Fiddler检查交通后添加:]

谢谢;我已经下载了Fiddler 2。

Fiddler报告Set-Cookie:[name] =已删除...有关注销的问题。我现在很困惑为什么。检查并显示登录屏幕的包含文件只有一个区域可以删除相关的cookie,如果设置了$ _GET ['logout']则在条件内。我没有看到发生这种情况,当我在删除cookie的语句之前在条件内放置一个error_log()语句时,似乎没有记录其他消息。

5 个答案:

答案 0 :(得分:3)

一些建议

  • 尝试使用Fiddler或类似内容检查HTTP请求和响应,以查看正在发送和传输的Cookie。这可以更好地了解出现的问题
  • 尝试让您的应用输出P3P header,例如header('P3P: CP="CAO PSA OUR"');

答案 1 :(得分:2)

有些可能跳出来并且咬你的有点微妙的是,IE不允许带下划线的域名(即:developer_1_test.example.com),而其他浏览器让你侥幸逃脱。你不是在生产中这样做,但是在开发环境中你可以轻松地进行监督,你可以为不同的开发人员/代码分支等设置一堆vhost。

答案 2 :(得分:1)

你需要更加具体。详细了解如何在两种浏览器上复制此行为,并找到您的错误。例如,可能有一两页您未能拨打session_start()

重要的是要记住,如果没有看到您的特定$ _SESSION变量,并导致重定向到您的登录,那么它很可能是您的系统中的一部分。

答案 3 :(得分:1)

当发生这种情况时,我检查的第一件事是setcookie()函数的domain参数设置正确。

我见过将cookie域设置为'example.com'的情况,但该网站是通过'www.example.com'访问的。

例如,如果您登录example.com上的页面,然后点击了一个链接,该链接将您带到www.example.com上的页面,您将不再登录。

解决方法是要么确保所有内部链接都是一致的,要么确保使用“.example.com”设置Cookie,这将为所有子域启用Cookie。

答案 4 :(得分:1)

我最终发现的内容如下:Firefox和IE的行为有所不同,因为当丢失的文档在14天的Expires:标题中时,它们会以不同的方式处理缓存。

Firefox显然会检查一次是否缺少数据,然后再没有再请求它。

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

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