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

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

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

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

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

更新:

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

有帮助吗?

解决方案

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

其他提示

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top