【问题标题】:FormsAuthentication authCookie is null only for some usersFormsAuthentication authCookie 仅对某些用户为空
【发布时间】:2010-01-14 01:26:54
【问题描述】:

我在使用 asp.net 表单身份验证时遇到了一个奇怪的问题。此问题仅发生在已成功登录的 30 多个用户中的 3 个用户中。我使用的是非常基本的身份验证代码,我已经使用了很多次并且从未见过这个问题。在用户成功认证并创建 auth cookie 后,添加 cookie,并调用 response.redirect 到 FormsAuthentication.GetRedirect(userid, false)。 Global.asax 中的 Application_AuthenticateRequest 方法被命中。

// Extract the forms authentication cookie
        string cookieName = FormsAuthentication.FormsCookieName;
        HttpCookie authCookie = Context.Request.Cookies[cookieName];

        if (null == authCookie)
        {
            // There is no authentication cookie.
            return;
        }

因此,在保存“好”cookie 并发生重定向后,cookie 立即为空。我已经通过调试器运行了代码,并且这 3 个用户的 cookie 仅为空。但是 cookie 看起来与许多成功登录的用户的 cookie 相同。

有什么想法吗?这是应该可以正常工作的标准代码。

【问题讨论】:

  • 尝试用 Fiddler 重现问题,看看是否设置了 auth cookie。
  • 用户计算机上是否有任何可能阻止创建任何 cookie 的设置?
  • 在同一台电脑上,mbalkema可以自己登录成功,但是作为这三个用户之一,cookie没有设置成功。这不是他们计算机的问题,而是 FormsAuthentication 模块中发生的一些奇怪的事情
  • 正如 Anthony 所说,这可能是某些用户 PC 的客户端问题。有问题的用户可以在另一台 PC 上登录以比较结果吗?也许让他们尝试 2 种不同的浏览器(IE + FF 等)也可以在那里进行比较。最后暂时将浏览器中与隐私和 cookie 相关的所有安全设置设置为最低设置,看看是否有区别。
  • 凯文,感谢您的回复。问题似乎不是浏览器问题。我看到使用有问题的用户登录并通过 IE 和 FF 中的调试器在本地运行网站的结果相同。今天早上,我让用户使用可以登录电脑的人登录……但无济于事。

标签: c# asp.net forms-authentication


【解决方案1】:

您确定“好”cookie 已保存并退出响应吗?在 FormsAuthentication 中可以将一个好的 cookie 添加到标头中,但是响应在退出时被其他一些系统错误(例如 w3wp.exe 崩溃)杀死,因此在没有 cookie 的情况下生成新响应并发生重定向无论如何。

根据我自己遇到类似问题的经验,我有一个自定义 Principal 类在身份验证(和 cookie 创建)后崩溃,而不是写入适当的 cookie,而是从响应中完全删除了 cookie。

【讨论】:

  • 感谢乔尔的回答。我与您的问题不完全一样,但是您建议在添加到响应之后但在重定向之前检查 cookie,并且 Global.asax 中的 authCookie = null 检查结果非常有帮助。事实证明,AD 组字符串的长度或 AD 组字符串中的字符损坏了 cookie。我没有使用 AD 中的组,所以我只是在身份验证后停止获取它们。现在一切正常。再次感谢。
猜你喜欢
  • 2015-03-03
  • 2022-11-18
  • 2015-01-19
  • 1970-01-01
  • 1970-01-01
  • 2019-05-24
  • 1970-01-01
  • 1970-01-01
  • 2015-10-12
相关资源
最近更新 更多