我正在使用带有Windows身份验证和注销选项的ASP.NET和C#。注销时,我将重定向到logout.aspx。有登录按钮用于重新登录。
点击重新登录时我正在这样做。
Response.Buffer = true;
Response.StatusCode = 401;
Response.StatusDescription = "Unauthorized";
Response.AddHeader("WWW-Authenticate", "NTLM");
Response.End();
使用有效凭据工作正常。但如果他们点击取消,则不会调用logout.aspx的页面加载,但会显示空白页面。如果我单击刷新,它将登录到应用程序而不询问任何凭据。
在注销期间我正在这样做。
protected void Page_Load(object sender, EventArgs e)
{
Page.Title = "Service Job Card - Logout";
if (!IsPostBack )
{
//Session.Abandon();
Session.RemoveAll();
Response.ClearHeaders();
Session[SessionNames.userLoggedOut] = true;
}
else if (IsPostBack && Session[SessionNames.userLoginTry] == null)
{
Session[SessionNames.userLoginTry] = true;
}
else
{
Session[SessionNames.userLoggedOut] = false;
Response.Redirect("~/Pages/Login.aspx", true);
}
}
所以在所有页面中我都在检查这个会话,如果它是假的,他将会登录。
有人可以告诉我为什么取消期间会显示空白页面吗?
答案 0 :(得分:0)
当您单击“重新登录”按钮时,您将发送401状态代码并突然结束响应(Response.End
) - 401状态可能会导致浏览器再次请求凭据提示(尽管关联的Windows票证可能完全有效)。
取消提示意味着浏览器可能会在那里停止,这意味着显示前一个请求的响应是空白的(因为您使用了Response.End
而没有写任何响应文本)。
刷新可能会导致回发后重播 - 根据您的page_load
代码,它将落入最后一个条件,设置您的标志并重定向到login.aspx。因为原始的Windows身份验证票证无论如何都是有效的,浏览器可能会对后续请求使用相同的内容。
您可以使用firebug / fiddler等工具轻松验证这一点,看看发生了什么。
我担心除了针对不同的行为之外,您的问题可能无法解决。例如,在Relogin上单击,您可以直接将用户带到login.aspx而不是发送401.