【发布时间】:2018-01-12 04:56:12
【问题描述】:
我在AccountController 中有以下LogOff 函数:
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
Session.Remove("UserName");
Session.Remove("UserRoleId");
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
AuthenticationManager.SignOut();
Session.Abandon();
Session.Clear();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
return RedirectToAction("Login", "Account");
}
现在假设我打开了两个浏览器选项卡。如果我从第一页注销,它工作正常。现在成功注销后,如果我再次从第二个窗口单击注销按钮,它会向我显示错误: "所提供的防伪令牌适用于与当前用户不同的基于声明的用户。"
我知道很多用户已经问过这个问题,但是这些答案 没有解决我的问题。我在这里也使用了
Session.Abandon()。
【问题讨论】:
-
这是预期的行为,但您可以使用
AntiForgery.Validate()在代码中手动处理,而不是使用[ValidateAntiForgeryToken] -
当用户在注销或发布表单后使用返回按钮时,您会经常看到这种情况,因此值得为用户优雅地处理,因为这是正确的行为。
标签: asp.net-mvc