5

我正在使用所有默认成员代码运行 ASP.NET MVC 4。AccountController 的 LogOff 代码是:

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

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

我注意到这段代码不会破坏会话,这意味着如果我使用一个帐户登录,将某些内容保存到会话中,然后注销并在同一个 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'在屏幕顶部的用户名旁边有一个链接。

如果您在购物车中添加了一些东西,但WebSecurity.Logout要清除您的会话,那么您将丢失此会话数据。

于 2013-02-06T12:34:10.143 回答