【问题标题】:What could cause ASP.NET FormsAuthentication Cookie problems apart from cookies being turned off?除了关闭 cookie 之外,还有什么可能导致 ASP.NET FormsAuthentication Cookie 问题?
【发布时间】:2011-03-30 08:36:50
【问题描述】:

人们报告在登录我们的 ASP.NET 网站之一时遇到问题。当我检查 IIS 日志时,他们的浏览器在登录后似乎没有缓存 FormsAuthentication cookie。

我认为它不像“用户已将浏览器设置为不接受 cookie”那么简单,因为:
a) 如果 cookie 通常不适用于他们的浏览器,他们永远不会在这个过程中达到他们所拥有的那样 - 例如,ASP.NET 会话 cookie 似乎工作正常。
b) 这些用户通常不会知道如何关闭 cookie。

所以我认为它一定是别的东西。什么样的问题会导致 ASP.NET FormsAuthentication cookie 停止工作,除了用户只是将他们的浏览器设置为拒绝 cookie?

编辑:例如This answer to another question 建议有时 FormsAuthentication Cookie 会因为它们太大而被丢弃 - 也许有人可以对此有所了解?

编辑:我们其中一个站点的 FormsAuthentication cookie 是 233 字节 - 是不是有点大?可以做得更小吗?也许这会有所帮助。

编辑:我注意到代码使用 FormsAuthentication.SetAuthCookie()Response.Redirect() 而不是 FormsAuthentication.RedirectFromLoginPage() - 这可能相关吗?

【问题讨论】:

    标签: asp.net cookies formsauthentication


    【解决方案1】:

    尝试以下步骤。

    http://blogs.msdn.com/b/rahulso/archive/2007/01/17/troubleshooting-cookies-a-case-study.aspx

    我很早就写了这篇文章,但是如果您密切关注它,您很有可能会找到根本原因。

    隔离根本原因是这里的关键。一旦你首先弄清楚它发生的原因,解决这个问题就会非常简单。

    拉胡尔

    www.dotnetscraps.com

    【讨论】:

      【解决方案2】:

      我遇到过类似的问题(不是表单身份验证 cookie,而是粘性负载均衡器 cookie),因为服务器没有正确的时间/时区配置,所以有时 cookie 过期日期早于用户机器中的当前时间。

      请看这里:How do expire values work for cookies and caching?

      希望对你有帮助

      【讨论】:

      • 这里有同样的问题,除了客户机器时区设置不正确。你如何解决这个问题? - cookie 隔天到期?
      【解决方案3】:

      您是否使用多个域与同一个 Web 应用程序通信?请记住,cookie 是特定于域的,www.mydomain.com www.mydomain.net my.domain.net。

      在黑暗中刺伤,您的 web.configs 中有机器密钥吗?

      【讨论】:

        【解决方案4】:

        可能是网络服务器名称或 DNS 名称的一部分包含下划线?

        例如:

        www2_http.mydomain.com

        我记得在某个开发阶段遇到过这个问题,此时 Sessions 不会正常运行。从机器域名中删除下划线为我解决了这个问题。

        问候

        【讨论】:

          【解决方案5】:

          如果您的网站在网络场中运行,您可能需要在所有服务器上设置相同的machine keys,或者如果用户切换服务器,它可能无法解密身份验证票证。

          RedirectFromLoginPage()SetAuthCookie 后跟 Response.Redirect() 之间的区别在于,第一个在禁用 cookie 时也有效(实际上它使用查询字符串参数来跟踪经过身份验证的用户)。

          【讨论】:

            【解决方案6】:

            有一个空闲超时 - 他们是否登录,然后一段时间没有做任何事情,然后再次尝试访问该站点?你可以检查一下。并且,查看超时设置为滑动超时(例如,上次请求后 20 分钟)还是固定超时(例如,登录后 20 分钟)。我认为滑动超时不是默认设置。

            【讨论】:

            • 谢谢。这确实可能导致表单身份验证问题,但这不是我的问题的原因。
            【解决方案7】:

            用户是否有可能通过 2 个不同的域访问您的网络服务器?例如,如果我去 www.foo.com 并获得一个身份验证 cookie,然后重定向到 www.bar.com,发送到 www.bar.com 的请求肯定不会包含 www.foo.com 设置的 cookie .

            如果您将 cookie 设置为 htp://login.foo.com,然后重定向到 htp://content.foo.com,也会发生此问题。但是,我相信可以使用通配符配置 cookie,以便将其应用于 *.foo.com。

            编辑:故意拼错了“http”,因此这个答案中没有实际的可点击垃圾链接。 :)

            【讨论】:

            • 谢谢。这确实可能导致表单身份验证问题,但这不是我的问题的原因。
            • 老鼠 - 这么简单的答案,嗯?如果您确实找到了根本原因,请将其作为答案发布在这里 - 现在我很好奇。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-07-19
            • 1970-01-01
            • 2013-02-05
            • 2014-08-03
            • 1970-01-01
            • 2010-12-12
            相关资源
            最近更新 更多