为什么 IE 不允许用户登录网站,除非处于私人模式?

为什么 IE 不允许用户登录网站,除非处于私人模式?

我不太确定这是否应该归于 SuperUser.com。我还考虑过 ServerFault.com 和 StackOverflow.com,但总的来说,我认为它应该归于此处?

我们托管了一个网站,该网站的代码相同,但可响应多个域名。12 月 28 日(网站未部署任何更改),部分用户突然无法登录,即使输入了正确的凭据,登录页面仍会再次显示空白。此问题仍在继续。

在远程控制受影响用户的电脑后,我们发现以下情况:

  • 此问题影响 Internet Explorer 9。
  • 用户可以从同一台机器上在 Chrome 上登录。
  • 用户可以使用 IE9 从私人浏览器会话登录。
  • 如果该网站被添加到受信任的站点安全区域,则用户就可以登录。
  • 用户无法从安全模式(以 启动iexplore -extoff)下的 IE 会话登录。
  • 只有一个网站响应的主机名阻止登录,另一个主机名上的相同用户帐户工作正常(请注意,这是在服务器端运行的相同代码和数据库),即使该网站不在受信任的站点区域。

失败情况下的一系列HTTP请求:

  1. 对受保护页面发出 GET 请求,向登录页面返回 302 FOUND 响应。
  2. 对登录页面发出 GET 请求。
  3. POST 到登录页面,包含凭证,返回重定向到受保护的页面。
  4. 对受保护的页面发出 GET 请求...由于某种原因,身份验证失败,浏览器被重定向到登录页面,如步骤 1 所示。

其他信息:

  • 操作系统是Windows 7旗舰版。
  • AV 系统是 AVG Internet Security 2012。

我能想到很多事情可以可能会出错,但在每种情况下,上述发现之一都与理论不相容。

知道是什么原因导致登录失败吗?

2012 年 1 月 6 日更新

增强日志记录显示该.ASPXAUTHcookie 正在步骤 3 中设置。其到期日期为未来 28 天、其路径为/、域为mysite.com、其值是加密表单票证,正如预期的那样。

但是,在步骤 4 中,Web 服务器没有接收到该 cookie。在步骤 4 中,其他 cookie 都被呈现给服务器,但唯独缺少了这个 cookie。

我看到 Cookie 通常以句点开头的域名设置,但我的不是。应该是.mysite.com而不是mysite.com?但是,如果这是错误的,它可能会对所有用户产生影响?

答案1

我在更新中对未返回到服务器的 cookie 的分析是错误的。在我的日志代码运行之前的某个时间点,该 cookie 已从服务器端的 cookie 集合中删除。

使用Wireshark,我确定实际上,向服务器发送了 cookie的副本.ASPXAUTH,其中一个无效,另一个有效。从技术上讲,cookie 的顺序是不确定的,所以我认为这会影响那些浏览器首先发送无效 cookie 的人……ASP.NET 根本没有考虑第二个有效的 cookie。

如上所述,有问题的 cookie 是 ,.ASPXAUTH这是 .NET 身份验证 cookie 的默认名称。我们认为它存在两个副本,因为它可能在过去以不同的域发送过(一次是 ,www.mysite.com另一次是.mysite.com)。

最简单的解决方案,效果很好,就是通过设置以下内容来更改身份验证 cookie 的名称Web.config

<authentication mode="Forms">
    <forms name="SOMEOTHERCOOKIENAME" />
</authentication>

然后,只需确保新的 cookie 仅发送与给定请求匹配的单个值!

答案2

知道是什么原因导致登录失败吗?

饼干。

  • 私人模式可能有一组单独的 cookie(否则它很难是私人的)
  • 不同的浏览器有不同的 Cookie
  • Cookies 通常特定于网站域名。

这些都和你的问题描述一致。


更新:

  • 检查相关安全区域(Int​​ernet、本地、受信任、受限)的 Cookie 设置。
    在 IE8 中:Tools, Internet Options, Privacy, Sites
    mysite.com 是否可能在相关区域中被阻止?

  • 检查你的实际 Cookie
    在 IE8 中:Tools, Internet Options, General, Browsing History, Settings, View Files
    查找cookie:username/mysite.com/

  • 检查非默认的 Cookie 处理设置
    它们可能会阻止“第三方”cookie(如果适用)
    可能会选择提示接受/拒绝新的 cookie。

你说“如果该网站被添加到受信任的站点安全区域,用户就可以登录。”这意味着 mysite.com 可能会在通常适用的其他区域之一中被阻止mysite.com

答案3

我遇到过非常类似的事情,IE 或 Chrome 中没有设置 ASP.NET 身份验证 cookie,但奇怪的是 Firefox 中却设置了(我仍然无法解释为什么会这样)。

对我来说,问题在于服务器时间不正确,它早了 30 分钟。因此,当我在 9:50 登录网站时,服务器将 Cookie 的过期时间设置为 10:10,但我的电脑上的时间是 10:20,因此 Cookie 已经过期。更新服务器上的时间解决了这个问题

答案4

在 Explorer 的 Internet 选项、常规、浏览历史记录、设置中,您可以尝试将“检查新版本...”设置从“自动”(第三选择)更改为“每次访问...”(第一选择)。

我遇到过几乎相同的问题,这个解决方法有效。一直没找到问题出在哪里...

另外(但我不认为这是你的情况),检查服务器和客户端之间的时钟差异。

相关内容