防伪cookie标记和表单字段标记在MVC 4中不匹配
我在ASP.NET MVC 4中使用默认login模块。我没有更改默认应用程序中的任何代码,我托pipe在共享服务器上。
我login后使用默认login页面。 我把浏览器闲置了一段时间。 然后,当我尝试使用[Authorize]
属性执行任何控制器操作时,显然应用程序已redirect到login页面。
然后,我尝试再次login,当我点击loginbutton时会出现错误。
The anti-forgery cookie token and form field token do not match.
login操作
// POST: /Account/Login [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public ActionResult Login(LoginModel model, string returnUrl) { if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe)) { return RedirectToLocal(returnUrl); } // If we got this far, something failed, redisplay form ModelState.AddModelError("", "The user name or password provided is incorrect."); return View(model); }
我通过在web.config中显式添加一个机器密钥来解决这个问题。
注意:出于安全原因,请勿使用此键。 从https://support.microsoft.com/en-us/kb/2915218#AppendixA生成一个。; 不要使用在线 – 细节, http://blogs.msdn.com/b/webdev/archive/2014/05/07/asp-net-4-5-2-and-enableviewstatemac.aspx
<machineKey validationKey="971E32D270A381E2B5954ECB4762CE401D0DF1608CAC303D527FA3DB5D70FA77667B8CF3153CE1F17C3FAF7839733A77E44000B3D8229E6E58D0C954AC2E796B" decryptionKey="1D5375942DA2B2C949798F272D3026421DDBD231757CA12C794E68E9F8CECA71" validation="SHA1" decryption="AES" />
以下是一个可以生成独特机器密钥的网站:
这是一个网站,生成独特的Machnie Keys http://www.developerfusion.com/tools/generatemachinekey/
确保将@ Html.AntiForgeryToken()放在页面的表单中
出现这个错误的另一个原因是,如果您在浏览器未caching的[Authorize]区域之间跳转(这样做的目的是为了阻止用户在注销时看到受保护的内容,并使用后退button)。
如果是这种情况,你可以使你的动作不被caching,所以如果有人点击后退button,最后在@ Html.AntiForgeryToken()的表单上,令牌不会被caching。
如何添加[NoCache] ActionFilterAttribute: 如何处理表单提交ASP.NET MVC Backbutton?
我有这个问题很长一段时间,并认为它是错误的ASP.NET。
实际上,这是服务器。 那时我和WinHost在一起,他们有200MB的内存限制。 只要我有20个用户在同一时间,我的极限已达到。 在这一点上,每个人都注销并产生了这些问题。
对我而言,这是由于使用button标签提交表单造成的。 将其更改为input提交标记可解决问题。
- Session.Clear()与Session.RemoveAll()
- 在Visual Studio 2013中更改项目端口号
- 升级到.NET 4.5后,iFrameparsing器错误
- EF 4.1exception“提供程序没有返回ProviderManifestTokenstring”
- 如何在URL中对加号(+)进行编码
- 将SOAP请求捕获到ASP.NET ASMX Web服务
- VS 2012无法加载与自定义绑定主机使用IIS的项目 – 认为它使用IIS Express
- Visual Studio“无法在Web服务器上启动debugging。 networking服务器没有及时回应。“
- search引擎 – Lucene或Solr