1

我有一个使用相当常见的身份验证方案的 PHP 站点。

  • 整个登录区域都需要 ssl。
  • 用户输入他们的用户名和密码,如果它们与数据库匹配,则会启动一个会话并为它们设置一个值。
  • 如果他们尝试访问需要身份验证的页面,它会检查该值是否存在于会话中,如果不存在,则将它们转发到登录页面。

我们总是遇到一些人在登录时遇到问题,因为他们没有设置为使用会话 cookie,或者他们在存储转发页面的缓存中存在问题等。

然而,最近,我们有很多人使用 IE 无法登录。修复他们的会话 cookie 设置并清除缓存无济于事,但如果他们在同一台计算机上使用 firefox/opera,他们可以登录。我很确定这是 IE 的问题,而不是介于两者之间的问题。

有谁知道最近对 IE 7 所做的任何会影响会话 cookie 的更改?

更新:

我最近确实在登录后立即实现了 session_regenerate_id() 调用,因为现在在某些情况下,用户可能有一个将要使用的现有会话,但那是很久以前的事了。

4

3 回答 3

3

我的第一步是找到一个可以使用 Firefox 而不是 IE 登录的用户,然后对两者运行 Fiddler 以查看登录过程的 HTTP 请求/响应对的差异。至少,这应该让您更好地了解在哪里看。

于 2009-06-29T19:43:51.930 回答
1

如果 IE 的安全设置被调高(这在企业环境中尤其常见),或者如果您登录的页面位于框架或 iframe 中,则可能是导致 cookie 无法保存的原因。如果是这种情况,您需要做的就是设置 P3P 策略 HTTP 标头。这是我能找到的关于如何实现它们的最佳描述。

于 2009-06-29T21:12:15.137 回答
0

我什么都没听到。不过,这正是我在所有公共项目中转而使用无 cookie 会话的原因。我相信 ASP.Net 内置了这个,但我更喜欢使用我自己的实现。在页面之间传递查询字符串 sessionid 参数并将其绑定到数据库记录或其他一些数据存储要可靠得多。

于 2009-06-29T18:18:52.153 回答