我正在使用所有默认会员代码运行ASP.NET MVC 4。 AccountController的LogOff的代码是:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
WebSecurity.Logout();
return RedirectToAction("Index", "Home");
}
我注意到此代码不会破坏会话,这意味着如果我使用一个帐户登录,将某些内容保存到会话中,然后注销并使用Web浏览器的同一实例中的其他帐户登录,我可以仍然可以看到上一个用户的会话。
不确定为什么会这样。任何建议将不胜感激。感谢。
答案 0 :(得分:7)
Session和Authentification会话不是一回事。
在这里,您销毁了用户的身份验证,但您确实重新启动了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");
}
答案 1 :(得分:4)
这是答案的“原因”部分。
考虑像亚马逊这样的购物车,屏幕顶部的用户名旁边有一个'This is not me'
链接。
如果您在购物车中添加了某些内容,但WebSecurity.Logout
要清除您的会话,那么您将丢失此会话数据。