2

我遇到了一个问题,即我的网站上的登录在 IE8 中无法始终如一地工作。它在 Firefox/Chrome/Safari 中运行良好,但在 IE8 中运行良好。

首次登录时一切正常。注销并尝试重新登录后,它通常会失败一段时间。它将最终在身份验证后重定向到登录页面。

所以身份验证成功,它返回 true,但似乎 IE8 不接受我们通过返回设置的会话 id 的新值:

Set-Cookie SESSIONID=........; 路径=/

在响应头中。但显然,这适用于清晰的缓存,我可以正常工作。但是在它已经存在之后它无法重置,因此在验证并尝试转到新页面后,它会看到这是从浏览器发送的旧会话 ID 并重定向到登录页面。

我在这里或其他地方没有找到任何真正解决这个问题的东西(除了清除缓存)。大多数对 IE8 cookie 问题的引用都是特定于语言/框架的,并且不回答这个问题。

我可能需要对 set-cookie 做一些特别的事情来完成这项工作吗?

更新:

我已将 IE8 设置为在接受任何 cookie 之前进行提示。当登录正常时,​​它会按预期提示。当它不起作用时,甚至没有提示除了 cookie..

更新 2:

我应该提到 cookie 应该在 ajax 调用之后设置:

$.get(authenticate_url, ....)

它请求响应的 url 返回设置会话 id 的标头,然后在回调函数中,用户被重定向到主页 - 假设登录成功。

4

2 回答 2

1

www.example.com当我为和设置 cookie 时,我遇到了类似的症状example.com。如果没有明确设置域,则为两者设置会话 cookie。

但是,较高级别的域 cookie 优先于较低的域。因此,如果www.example.com尝试设置一个 cookie,但example.com已经有,那么example.comcookie 将保持原位并继续申请www.example.com.

有两种方法可以解决这个问题。一是不允许有子域和没有www子域的访问。将一个重定向到另一个。第二个是明确设置 cookie 域,这样就不会有两个版本。

当然,这实际上可能不是您的问题。实验并找出:)

于 2011-03-31T17:03:38.557 回答
1

它是第一方 cookie 还是第三方 cookie。如果是后者,请确保您发送的是 P3P 标头。您是否设置了 HTTPOnly 属性?您确定 cookie 的域总是相同的吗?例如,如果您在访问“example.com”时设置了 cookie,并试图从“www.example.com”更改它,那么您会遇到问题。

于 2011-03-31T02:23:44.583 回答