对于我的Web应用程序,我使用的是Windows身份验证。我在Global.asax页面的Session_Start
事件中编写了以下代码;如果登录用户有效,我将这些细节存储在会话中
Session["UserDetails"] = "XXXX";
如果用户无效,则
Session["UserDetails"] = null;
然后在我的MasterPage中,我使用以下代码
if(!IsPostBack)
{
if(Session["UserDetails"] == null)
{
Response.Redirect("AuthenticationFailure.aspx");
}
}
但是,它没有重定向到该特定的失败页面。当我在每个aspx页面加载中检查相同的条件时,它似乎工作正常,但页面未被重定向。
这里可能出现什么问题?我应该如何重定向到AuthenticationFailure页面才能使其正常工作?
答案 0 :(得分:0)
由于您的AuthenticationFailure页面正在使用在未经过身份验证的情况下重定向的母版页,因此该页面将永远不会显示,因为它将在到达页面之前重定向。
要么在母版页的代码中处理此问题,要么不要使用母版页作为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);
}
}