2

对于我的 Web 应用程序,我使用的是 Windows 身份验证。Session_Start在Global.asax 页面的情况下,我编写了以下代码;如果登录用户有效,我将这些详细信息存储在会话中

Session["UserDetails"] = "XXXX";

如果用户无效,则

Session["UserDetails"] = null;

然后在我的 MasterPage 中,我使用以下代码

if(!IsPostBack)
{ 
    if(Session["UserDetails"] == null)
    {
        Response.Redirect("AuthenticationFailure.aspx");
    }
}

但是,它不会重定向到那个特定的失败页面。当我在每个 aspx 页面加载中检查相同的条件时,它似乎工作正常,但页面没有被重定向。

这里可能出了什么问题?我应该如何重定向到 AuthenticationFailure 页面才能使其正常工作?

4

1 回答 1

0

由于您的 AuthenticationFailure 页面使用的是在用户未通过身份验证时重定向的母版页,因此该页面将永远不会显示,因为它会在到达页面之前重定向。

在您的母版页中的代码中处理此问题,或者不要将母版页用于您的身份验证失败页面。

您可以使用变量检查请求的路径,Request.FilePath如果它已经在 AuthenticationFailure 页面上,则避免重定向。

if(!IsPostBack)
{ 
    const string FailurePage = "AuthenticationFailure.aspx";
    string page = Request.FilePath.Substring(Request.FilePath.LastIndexOf('/'));
    if(Session["UserDetails"] == null && page != FailurePage)
    {
        Response.Redirect(FailurePage);
    }
}
于 2013-08-09T14:14:07.763 回答