Il token del cookie anti-contraffazione e il token del campo del modulo non corrispondono in MVC 4

Sto utilizzando il modulo di accesso predefinito in ASP.NET MVC 4. Non ho modificato alcun codice nell’applicazione predefinita e l’ho ospitato su un server condiviso.

Dopo aver effettuato l’accesso utilizzando la pagina di accesso predefinita. ho tenuto il browser inattivo per qualche tempo. Quindi, ovviamente, l’applicazione viene reindirizzata alla pagina di accesso quando provo a eseguire un’azione controller con l’attributo [Authorize] .

Quindi provo ad accedere nuovamente e dà un errore quando faccio clic sul pulsante di accesso.

 The anti-forgery cookie token and form field token do not match. 

inserisci la descrizione dell'immagine qui

Azione di accesso

 // 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); } 

Ho risolto il problema aggiungendo esplicitamente una chiave computer in web.config.

Nota: per motivi di sicurezza non utilizzare questa chiave. Generarne uno da https://support.microsoft.com/en-us/kb/2915218#AppendixA . Non utilizzare online, dettagli, http://blogs.msdn.com/b/webdev/archive/2014/05/07/asp-net-4-5-2-and-enableviewstatemac.aspx

   

Ecco un sito che genera tasti macchina univoci:

http://www.developerfusion.com/tools/generatemachinekey/

Un altro motivo per cui si verifica questo errore è se si sta saltando tra le aree [Autorizza] che non sono memorizzate nella cache dal browser (questo sarebbe fatto apposta per impedire agli utenti di vedere il contenuto protetto quando si disconnettono e usando il pulsante Indietro per esempio ).

In questo caso puoi rendere le tue azioni non memorizzate nella cache, quindi se qualcuno fa clic sul pulsante Indietro e finisce su un modulo con @ Html.AntiForgeryToken () il token non verrà memorizzato nella cache da prima.

Vedi questo post per come aggiungere [NoCache] ActionFilterAttribute: Come gestire l’invio del modulo ASP.NET MVC Back button?

Ecco un sito che genera Machnie Keys uniche http://www.developerfusion.com/tools/generatemachinekey/

assicurati di inserire @ Html.AntiForgeryToken () nel modulo della tua pagina

Ho avuto questo problema per molto tempo e ho pensato che fosse qualcosa di sbagliato in ASP.NET.

In realtà, era il server. Ero con WinHost quindi, e hanno un limite di memoria di 200 MB. Appena ho avuto ~ 20 utenti allo stesso tempo, il mio limite è stato raggiunto. A questo punto, tutti sono stati disconnessi e hanno risolto questi problemi.

Per me, questo è stato causato dall’invio di un modulo utilizzando un tag pulsante. La modifica di questo in un tag di invio dell’input risolve il problema.