ASP.NET 无 Cookie 表单身份验证在登录页面添加书签时未设置 cookie

问题描述 投票:0回答:2

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

是否有其他解决方案来解决此表单身份验证问题?这是表单身份验证吗?

asp.net forms-authentication cookieless
2个回答
1
投票

这里的问题是,无论是否提供重定向位置,您始终使用 RedirectFromLoginPage。如果未提供,则重定向将失败。对此的正确解决方案是检查重定向 url,如果它不可用,则重定向到 default.aspx(源示例借自此博客文章):

// 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
投票

要删除此设置,请将 web.config 中 sessionState 的 cookieless 属性添加为 false。

<configuration>
  <system.web>
    <sessionState mode="InProc" cookieless="UseCookies" timeout="20" />
  </system.web>
</configuration>

<configuration>
  <system.web>
    <sessionState mode="InProc" cookieless="false" timeout="20" />
  </system.web>
</configuration>
© www.soinside.com 2019 - 2024. All rights reserved.