Asp.net mvc 注销问题:提供的防伪令牌用于与当前用户不同的基于声明的用户
我在Asp.net mvc 注销问题:提供的防伪令牌用于与当前用户不同的基于声明的用户,asp.net-mvc,Asp.net Mvc,我在AccountController中有以下LogOff功能: [ValidateAntiForgeryToken] public ActionResult LogOff() { Session.Remove("UserName"); Session.Remove("UserRoleId"); AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie); Authent
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.discard()
这正是应该发生的事情。第二个用户没有任何要注销的内容,因为他已注销。那很好 您的问题是自定义错误显示给用户。您肯定希望显示一些自定义消息,为用户提供更多信息和更少的技术细节
为了做到这一点,您需要一些异常处理程序,并在其中处理
httpantiforyexception
,这正是应该发生的。第二个用户没有任何要注销的内容,因为他已注销。那很好
您的问题是自定义错误显示给用户。您肯定希望显示一些自定义消息,为用户提供更多信息和更少的技术细节
为了做到这一点,您需要一些异常处理程序,并在其中处理
httpantiforyexception
它正常工作,您现在需要做的是一个try-catch检查,然后在此场景中将用户重定向到登录页面它正常工作,您现在需要做的是try-catch检查,然后继续此场景将用户重定向到登录页面这是预期的行为,但您可以使用[ValidateAntiForgeryToken]
在代码中手动处理当用户在注销或发布表单后使用“后退”按钮时,您会经常看到这种情况,因为它是正确的行为,因此值得用户优雅地处理。这是预期的行为,但您可以使用[ValidateAntiForgeryToken]
在代码中手动处理AntiForgery.Validate()
当用户在注销或发布表单后使用“后退”按钮时,您会经常看到这一点,该表单值得用户优雅地处理,因为它是正确的行为。谢谢。你的建议对我很有帮助。如果(例如HttpAntiforyException){filterContext.Result=new RedirectResult(“~/Account/Login”);}谢谢,我在customerrorattribte中添加了代码。你的建议对我很有帮助。如果(例如HttpAntiforyException){filterContext.Result=new RedirectResult(“~/Account/Login”);,我在customerrorattribte中添加了代码