我们的ASP.NET 4.0应用程序的表单身份验证设置为cookieless =“AutoDetect”。我注意到,如果用户为我们的登录页面添加书签,则书签链接将设置为https://hostname.com/Login.aspx?AspxAutoDetectCookieSupport=1。如果用户直接从新的浏览器会话导航到此并执行有效登录,则不会设置cookie。如果我直接导航到该页面,请从查询字符串中删除AspxAutoDetectCookieSupport,正确创建cookie。
如果用户直接导航到Default.aspx或根目录,登录功能正常,即使AspxAutoDetectCookieSupport = 1加上查询字符串。
当用户单击登录按钮时,我们会对登录页面进行回发,并根据我们的数据库手动检查用户凭据。如果成功,我们会:
FormsAuthentication.RedirectFromLoginPage(userName, false);
我花了很多时间对此进行调试,包括查看参考源中的ASP.NET表单身份验证代码,并且无法确定导致此问题的原因。我们目前唯一的解决方案是告诉用户从他们的书签URL中删除登录页面,并在我们的登录页面上添加书签按钮,供用户点击。
是否有其他解决方案可以修复此表单身份验证问题?它是一种形式认证吗?
答案 0 :(得分:1)
这里的问题是您始终使用RedirectFromLoginPage,无论是否提供重定向位置。如果未提供,则重定向将失败。对此的正确解决方案是检查重定向网址并重定向到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");
}