2011-03-21 58 views
4

我们将ASP.NET 4.0应用程序的表单验证设置为cookieless =“AutoDetect”。我注意到,如果用户为我们的登录页面添加书签,书签链接将设置为https://hostname.com/Login.aspx?AspxAutoDetectCookieSupport=1。如果用户直接从新的浏览器会话导航至此并执行有效的登录,则不会设置Cookie。如果我直接导​​航到该页面,请从查询字符串中删除AspxAutoDetectCookieSupport,则cookie会正确创建。ASP.NET Cookieless Forms验证登录页面为书签时未设置Cookie

如果用户直接导航到Default.aspx或根目录,即使使用AspxAutoDetectCookieSupport = 1添加到查询字符串,也可以正确登录。

当用户点击登录按钮时,我们会回传登录页面,并根据我们的数据库手动检查用户凭证。如果成功的话,我们这样做:

FormsAuthentication.RedirectFromLoginPage(userName, false); 

我花了很多时间调试这一点,包括看着参考源的ASP.NET窗体身份验证码,并一直无法确定是什么原因造成这一点。目前我们唯一的解决方案是告诉用户从他们的书签URL中删除登录页面,并在我们的登录页面添加书签按钮以供用户点击。

是否有其他解决方案来解决此表单身份验证问题?它是一个但在表单身份验证?

回答

1

这里的问题是,您始终使用RedirectFromLoginPage,无论是否提供重定向位置。如果未提供,则重定向将失败。这一个适当的解决办法是检查重定向URL和重定向到Default.aspx,如果它是不可用(从this blog article借来源为例):

// Once the user's entered credentials are verified // 
if(Request.Params["ReturnUrl"] != null) 
{ 
    FormsAuthentication.RedirectFromLoginPage(txtUserName.text, false); 
} 
else 
{ 
    FormsAuthentication.SetAuthcookie(txtUserName.text, false); 
    Response.Redirect("Default.aspx"); 
} 
+0

对不起,您的答案反应迟缓。我似乎得到的问题是否ReturnUrl在QueryString中。我其实在IIS 7.5上运行的本地机器上试过你的代码,并且它以某种方式工作。我将相同的DLL复制到我们的测试服务器,并继续执行相同的问题。这似乎是表单身份验证中的一种侥幸。 – 2011-03-24 15:16:28