[英]ASP.NET Authentication cookie
在具有基于表单的身份验证的应用程序上,我具有带有以下Authenticate事件处理程序的标准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。
在我的web.config中,身份验证设置如下:
<authentication mode="Forms">
<forms loginUrl="..." timeout="180" cookieless="AutoDetect"/>
</authentication>
阅读MSDN上有关AutoDetect和SetAuthCookie的文档,我明白了:
AutoDetect如果设备配置文件支持cookie,则指定使用cookie。 对于已知支持cookie的桌面浏览器,启用后将使用探测机制尝试使用cookie。 如果设备不支持Cookie,则不会使用任何探测机制。
FormsAuthentication.SetAuthCookie:使用提供的cookie路径或URL(如果使用的是无cookie身份验证)为提供的用户名创建身份验证票证,并将其添加到响应的cookie集合中。
我认为在我的场景中,将使用无cookie身份验证,但是没有使用(无论如何,重定向后我在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登录,但此操作无效。 其他问题的设置类似(机器上没有什么特别突出的,用户告诉我他们在其他网站上没有问题)
那我在做什么错呢?
我也遇到了类似的问题。 但这仅用于Internet Explorer8。经过研究,我发现IE8默认运行在无炊具模式下。 因此,我在web.config中更改了这一行: <forms loginUrl="..." timeout="180" cookieless="AutoDetect"/>
改为<forms loginUrl="..." timeout="180" cookieless="UseUri"/>
,并且工作正常。
您是否在web.config文件中指定表单身份验证cookie的域? 它与网站的域名相匹配吗?
我相信IE中的“中等安全性”设置会阻止第三方Cookie,因此问题可能是IE认为您的身份验证Cookie是第三方Cookie。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.