LogOff问题:提供的防伪令牌适用于与当前用户不同的基于声明的用户

时间:2017-08-04 09:52:15

标签: asp.net-mvc

我在LogOff中有以下AccountController功能:

[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()

2 个答案:

答案 0 :(得分:3)

这正是应该发生的事情。第二个用户没有注销,因为他已经注销了。这很好。

您的问题是自定义向用户显示的错误。您肯定希望显示一些自定义消息,为用户提供更多信息和更少的技术细节。

为了做到这一点,你需要一些异常处理程序,并在其中处理HttpAntiForgeryException

答案 1 :(得分:1)

它正常工作,因为你现在需要做的就是尝试捕获检查,然后在这种情况下将用户重定向到登录页面