5

すべての既定のメンバーシップ コードを使用して ASP.NET MVC 4 を実行しています。AccountController の LogOff のコードは次のとおりです。

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult LogOff()
    {
        WebSecurity.Logout();

        return RedirectToAction("Index", "Home");
    }

このコードはセッションを破棄しないことに気付きました。つまり、1 つのアカウントでサインインし、セッションに何かを保存してからログアウトし、Web ブラウザーの同じインスタンスで別のアカウントでサインインしても、前のユーザーのセッション。

なぜこれが起こっているのか分かりません。アドバイスをいただければ幸いです。ありがとう。

4

2 に答える 2

7

セッションと認証セッションは同じものではありません。

ここでは、ユーザーの認証を破棄しましたが、ASP.NETセッションを再開しました。

ここでより多くの説明:https ://stackoverflow.com/a/1306932/971693

これを試してみてください:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
    WebSecurity.Logout();

    Session.Abandon();

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

    // clear session cookie (not necessary for your current problem but i would recommend you do it anyway)
    HttpCookie cookie2 = new HttpCookie("ASP.NET_SessionId", "");
    cookie2.Expires = DateTime.Now.AddYears(-1);
    Response.Cookies.Add(cookie2);


    return RedirectToAction("Index", "Home");
}
于 2012-11-26T02:10:38.820 に答える
4

これは、答えの「理由」の部分です。

'This is not me'画面上部のユーザー名の横にリンクがある Amazon などのショッピング カートを考えてみましょう。

カートに何かを追加した場合WebSecurity.Logout、セッションをクリアすると、このセッション データが失われます。

于 2013-02-06T12:34:10.143 に答える