web-dev-qa-db-fra.com

Comment effacer le cache du navigateur lors du clic sur le bouton de retour du navigateur dans MVC4?

Je sais que c'est une question populaire dans stackoverflow. J'ai parcouru toutes les mêmes questions et je n'arrive pas à trouver la bonne réponse pour moi. Ceci est mon contrôleur de déconnexion Action Résultat

    [Authorize]       
    public ActionResult LogOut(User filterContext)
    {
        Session.Clear();
        Session.Abandon();
        Session.RemoveAll();
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
        Response.Cache.SetNoStore();
        FormsAuthentication.SignOut();
        return RedirectToAction("Home", true);

    }

Ça n'a pas marché pour moi. J'ai aussi essayé d'ajouter-

<meta http-equiv="Cache-Control" content="no-cache" /><meta http-equiv="Pragma" content="no-cache"/><meta http-equiv="Expires" content="0"/>

aucun de ces problèmes n'a résolu mon problème.

20
Sandy

Le problème avec votre approche est que vous la placez là où il est déjà trop tard pour que MVC l'applique. Les trois lignes suivantes de votre code doivent être insérées dans la méthode qui affiche la vue (par conséquent la page) que vous ne souhaitez pas afficher.

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetNoStore();

Si vous souhaitez appliquer le comportement "pas de cache à l'arrière du navigateur" sur toutes les pages, vous devez le mettre dans global.asax.

protected void Application_BeginRequest()
{
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
    Response.Cache.SetNoStore();
}
50
von v.

Définissez simplement le cache de sortie sur l'action. J'ai utilisé cette approche dans de nombreux projets:

[HttpGet, OutputCache(NoStore = true, Duration = 1)]
public ActionResult Welcome()
{
    return View();
}

L'attribut ci-dessus demandera essentiellement au navigateur d'obtenir une nouvelle copie de la page à partir de l'action de votre contrôleur si l'utilisateur navigue en arrière/en avant vers votre vue.

Vous pouvez également définir votre mise en cache dans le web.config et l'utiliser en conjonction avec cet attribut pour éviter certaines répétitions. Voir ici

13
MarkG