c# – ASP.NET身份验证cookie

在具有基于表单的身份验证的应用程序上,我有一个标准的ASP.NET登录控件,其中包含以下Authenticate事件处理程序.

void Login_Authenticate(object sender, AuthenticateEventArgs e)
{
    if (Security.AuthenticateUser(Login.UserName, Login.Password))
    {
        e.Authenticated = true;
        RedirectFromLoginPage(Login.UserName);
    }
    else
    {
        e.Authenticated = false;
    }
}

RedirectFromLoginPage函数如下所示:

private void RedirectFromLoginPage(String username)
{
    String returnUrl = GetReturnUrl();
    FormsAuthentication.SetAuthCookie(username, true, "/");
    Response.Redirect(returnUrl, true);
}

这在99%的情况下都能正常工作.但是,我有时会收到无法登录的人的支持电话.他们会输入他们的凭据,重定向回主页(当一切正常时会发生这种情况),但他们不会登录.

确定它可能是一个cookie问题,我试图通过将我的隐私选项设置为“阻止所有Cookie”来重现我的环境中的问题,我能够重现问题.调用SetAuthCookie函数,但在下一页上加载HttpContext.Current.User.Identity.IsAuthenticated返回false.

在我的web.config中,身份验证设置如下:

<authentication mode="Forms">
  <forms loginUrl="..." timeout="180" cookieless="AutoDetect"/>
</authentication>

阅读MSDN上关于AutoDetect和SetAuthCookie的文档,我得到了:

AutoDetect Specifies that cookies are
used, if the device profile supports
cookies; otherwise, cookies are not
used.For desktop browsers that are
known to support cookies, a probing
mechanism will be used to try to use
cookies, when enabled. If a device
does not support cookies, no probing
mechanism will be used.

FormsAuthentication.SetAuthCookie :
Creates an authentication ticket for
the supplied user name and adds it to
the cookies collection of the
response, using the supplied cookie
path, or using the URL if you are
using cookieless authentication.

我想在我的场景中,将使用cookieless身份验证,但事实并非如此(在重定向之后,我在QueryString中看不到任何内容).

如果我在RedirectFromLoginPage函数中设置断点并测试一些我得到的值:

bool cookieSupport = Request.Browser.Cookies; //"true"
bool redirectWithCookies = Request.Browser.SupportsRedirectWithCookie; //"true"
HttpCookieMode currentMode = FormsAuthentication.CookieMode; //"AutoDetect"

我不确定Request.Browser.Cookies是否在这里是真的.浏览器确实支持cookie,但它们都被阻止了……

无论如何,我在一台发生问题的机器上远程遥控了几分钟.隐私设置设置为中等,因此它应该能够接受cookie.这是一个标准的Win7 / IE8设置.我尝试将网站添加到用户的受信任区域,通过https登录,但它无法正常工作.其他问题设置是相似的(没有什么真正脱颖而出的机器和用户告诉我,他们在其他网站上没有问题)

那么我在这里做错了什么?

最佳答案 您是否在web.config文件中为表单身份验证cookie指定了域?它是否与网站的域名匹配?

我相信IE中的中等安全设置会阻止第三方cookie,因此问题可能是IE认为您的身份验证cookie是第三方cookie.

点赞