1

私が開発してきたアプリケーション (ASP.Net 4 / C#) は、FormsAuthentication.RedirectToLoginPage() を使用して、ユーザーがログアウト ボタンをクリックした後にログイン ページに戻します。

アプリケーションが IIS サイトのルートに配置されている場合、リダイレクトが機能しないことがわかりました。ログアウト ボタンをクリックすると、ページがリロードされます。

アプリケーションがサイト内のアプリケーション仮想フォルダーに展開されると、リダイレクトが機能します。

Respond.Redirect() も使用してみましたが、これも機能しません。サイトをゼロから再作成してみました (うまくいきませんでした)。

更新: 別のマシンでこの動作を確認できたので、1 つの Web サーバーだけではないと確信しています。

ログアウト ボタンのコード:

    protected void lbLogout_Click(object sender, EventArgs e)
    {
        FormsAuthentication.SignOut();
        Session.Abandon();

        // clear authentication cookie
        HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, "");
        cookie1.Expires = DateTime.Now.AddYears(-1);
        cookie1.Path = FormsAuthentication.FormsCookiePath;
        cookie1.HttpOnly = true;
        Response.Cookies.Add(cookie1);

        // clear session cookie 
        HttpCookie cookie2 = new HttpCookie("ASP.NET_SessionId", "");
        cookie2.Expires = DateTime.Now.AddYears(-1);
        Response.Cookies.Add(cookie2);

        FormsAuthentication.RedirectToLoginPage();
        //Response.Redirect("~/login.aspx");
        Response.End();
    }

助けてくれてありがとう!

4

1 に答える 1

0

FormsAuthentication.RedirectToLoginPage内部的に行うのは、Response.Redirectを呼び出すことだけです。また、を呼び出すことは悪い習慣Response.Endです。Fiddlerなどのトレースツールを使用して、メソッドが呼び出されたときに実際の応答に何が含まれるかを確認することをお勧めします。これにより、ブラウザが受信しているものに光が当てられるはずです。

動作していないという事実Response.Redirectは、より大きな問題の兆候です。HTTP 302がクライアントに返されない場合、ASP.netパイプラインの何かがリダイレクト応答の邪魔になっています。

于 2012-11-10T04:33:55.147 に答える