ASP.NET Cookieless Forms在登录页面被加入书签时不设置cookie

时间:2011-03-21 13:25:16

标签: asp.net forms-authentication cookieless

我们的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中删除登录页面,并在我们的登录页面上添加书签按钮,供用户点击。

是否有其他解决方案可以修复此表单身份验证问题?它是一种形式认证吗?

1 个答案:

答案 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");
}