C# ASP.NET身份验证cookie

C# ASP.NET身份验证cookie,c#,.net,asp.net,authentication,C#,.net,Asp.net,Authentication,在具有基于表单的身份验证的应用程序上,我有一个带有以下身份验证事件处理程序的标准ASP.NET登录控件 void Login_Authenticate(object sender, AuthenticateEventArgs e) { if (Security.AuthenticateUser(Login.UserName, Login.Password)) { e.Authenticated = true; RedirectFromLoginPa

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

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

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

<authentication mode="Forms">
  <forms loginUrl="..." timeout="180" cookieless="AutoDetect"/>
</authentication>
我不确定Request.Browser.Cookies在这里是否为真。浏览器确实支持Cookie,但它们都被阻止

不管怎样,我在一台发生问题的机器上用了几分钟遥控器。隐私设置被设置为“中等”,因此它应该能够接受cookies。这是一个标准的Win7/IE8设置。我尝试将网站添加到用户的信任区,通过https登录,但没有成功。其他问题设置与此类似(机器没有什么特别之处,用户告诉我他们在其他网站上没有问题)


那么我做错了什么呢?

是否在web.config文件中指定表单验证cookie的域?它和网站的域名匹配吗


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

我也遇到了类似的问题。但它只适用于InternetExplorer8。经过一些研究,我发现IE8默认运行在无炊具模式下。因此,我在web.config中更改了这一行:

,它工作正常

我不知道,但将站点添加到受信任区域是否可以避免此问题?假设默认隐私级别没有更改,是的,应该这样做。在测试更改之前,请确保在将站点添加到受信任区域后关闭所有IE会话。另一个想法是,尝试清空浏览器缓存。我似乎记得在过去,完全缓存导致表单身份验证出现问题(仅在IE中)。是的,我这样做(清空缓存和重新启动IE)都没有用。事实上,它只是没有检测到它应该使用cookieless,这让我担心。感谢您的帮助。如果可以,您可能需要下载并安装IEWatch()的评估副本。此工具将允许您查看用户浏览器上的cookie发生了什么。
bool cookieSupport = Request.Browser.Cookies; //"true"
bool redirectWithCookies = Request.Browser.SupportsRedirectWithCookie; //"true"
HttpCookieMode currentMode = FormsAuthentication.CookieMode; //"AutoDetect"