C# 如何处理windows身份验证弹出窗口取消按钮?

C# 如何处理windows身份验证弹出窗口取消按钮?,c#,asp.net,windows-authentication,C#,Asp.net,Windows Authentication,我正在使用ASP.NET和C#以及windows身份验证和注销选项。注销时,我将重定向到logout.aspx。为重新登录提供了登录按钮 在单击重新登录时,我正在执行此操作 Response.Buffer = true; Response.StatusCode = 401; Response.StatusDescription = "Unauthorized"; Response.AddHeader("WWW-Authenticat

我正在使用ASP.NET和C#以及windows身份验证和注销选项。注销时,我将重定向到logout.aspx。为重新登录提供了登录按钮

在单击重新登录时,我正在执行此操作

        Response.Buffer = true;
        Response.StatusCode = 401;
        Response.StatusDescription = "Unauthorized";
        Response.AddHeader("WWW-Authenticate", "NTLM");
        Response.End();
    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);
        }
    }
它使用有效的凭据工作正常。但是如果他们单击cancel,它不会调用logout.aspx的页面加载,而是显示空白页面。如果我单击刷新,它将在不询问任何凭据的情况下登录到应用程序

在注销期间,我正在这样做

        Response.Buffer = true;
        Response.StatusCode = 401;
        Response.StatusDescription = "Unauthorized";
        Response.AddHeader("WWW-Authenticate", "NTLM");
        Response.End();
    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);
        }
    }
所以在所有页面中,我都在检查这个会话,如果它是假的,他将登录


有人能告诉我为什么取消时会显示空页吗?

当您单击“重新登录”按钮时,您正在发送401状态代码并突然结束响应(
response.End
)-401状态可能会导致浏览器再次请求凭据提示(尽管关联的windows票证可能完全有效)

取消提示意味着浏览器可能会立即停止,这意味着显示来自上一个请求的空白响应(因为您使用了
response.End
,但没有写入任何响应文本)

刷新可能会导致回发重播-根据您的
页面加载
代码,它将进入最后一个else条件,设置您的标志并重定向到login.aspx。因为原始的windows身份验证票证无论如何都是有效的,所以浏览器可能会在后续请求中使用相同的票证

您可以使用firebug/fiddler等工具轻松验证这一点,并查看发生了什么


恐怕除了针对不同的行为之外,你的问题可能没有解决办法。例如,在单击“重新登录”时,您可以直接将用户带到login.aspx,而不是发送401

如果您使用windows身份验证,则能够注销站点是一项不寻常的要求,因为正如您所观察到的,只要刷新页面(或关闭并重新打开浏览器),通常会自动重新通过站点身份验证。谢谢..我理解您的意思。但根据我的要求,我需要提供windows身份验证的注销。除了他单击“取消”时,它工作正常。如果他没有单击“取消”并尝试访问该页面,它将不允许,因为正如您所看到的,我正在使用会话进行登录检查。因此,如果我能够跟踪“取消”按钮,则不会出现问题。是否可能?不,取消是在浏览器的上下文中进行的,因此在服务器端您无法执行任何操作。而且,由于取消,您最终没有加载任何页面-因此您也没有在浏览器端运行任何代码。(除非你想编写一个浏览器加载项来满足这个要求,即使这样,我也不确定你是否可以访问任何合适的钩子)是的..谢谢..但要了解信息..按ok按钮调用pageload有多大作用?