0

ASP.NET と C# を Windows 認証とログアウト オプションで使用しています。ログアウト時に、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);
        }
    }

したがって、すべてのページでこのセッションをチェックしています。false の場合、彼はログインします。

キャンセル時に空のページが表示される理由を誰か教えてもらえますか?

4

1 に答える 1

0

[再ログイン] ボタンをクリックすると、401 ステータス コードが送信され、応答が突然終了します ( Response.End) - 401 ステータスにより、ブラウザは資格情報のプロンプトを再度要求する可能性があります (ただし、関連する Windows チケットは完全に有効であった可能性があります)。

プロンプトをキャンセルすると、ブラウザはおそらくその場で停止し、空白だった以前のリクエストからのレスポンスを表示することを意味します (Response.Endレスポンス テキストを何も書き込まずに使用したため)。

更新により、おそらくポストバック リプレイが発生し、page_loadコードに従って、フラグを設定して login.aspx にリダイレクトする最後の else 条件に陥ります。元の Windows 認証チケットはとにかく有効だったため、ブラウザは後続の要求に同じものを使用した可能性があります。

firebug/fiddler などのツールを使用してこれを簡単に検証し、何が起こっているかを確認できます。

残念ながら、別の動作をターゲットにする以外に、問題の解決策はおそらくないでしょう。たとえば、[再ログイン] をクリックすると、401 を送信する代わりに、すぐにユーザーを login.aspx に誘導できます。

于 2013-01-03T09:50:57.740 に答える