Quelle est la meilleure façon de traiter avec le cache et le bouton précédent du navigateur?

StackOverflow https://stackoverflow.com/questions/23094

  •  09-06-2019
  •  | 
  •  

Question

Quelle est la meilleure façon de gérer un utilisateur de revenir à une page qui avait les éléments mis en cache dans un asp.net app?Est-il une bonne façon de capturer le bouton retour (activité?) et gérer le cache de cette façon?

Était-ce utile?

La solution

Vous pouvez essayer d'utiliser le HttpResponse.Propriété du Cache si cela peut aider:

Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetValidUntilExpires(false);
Response.Cache.VaryByParams["Category"] = true;

if (Response.Cache.VaryByParams["Category"])
{
   //...
}

Ou pourrait pourrait bloquer la mise en cache de la page tout à fait avec HttpResponse.CacheControl, mais sa été dépréciée en faveur de la Cache de la propriété ci-dessus:

Response.CacheControl = "No-Cache";

Edit:OU vous pourriez vraiment aller de noix et tout faire à la main:

Response.ClearHeaders();
Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1
Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1 
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.1 
Response.AppendHeader("Keep-Alive", "timeout=3, max=993"); // HTTP 1.1 
Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.1 

Autres conseils

Pour autant que je sais (ou au moins d'avoir lu) est de son mieux pour essayer de ne pas travailler, en réponse à des événements de l'utilisateur, mais plutôt de penser "dans la page"..

L'architecte de votre application afin qu'il ne se soucie pas si le bouton de retour est poussé..Il vient de traiter avec elle..Cela peut signifier un peu de travail supplémentaire à partir d'un point de vue du développement, mais dans l'ensemble permettra à l'application d'un beaucoup plus robuste..

I. e si l'étape 3, permet d'effectuer certains changements de données, l'utilisateur clique sur le dos (à l'étape 2), puis clique sur suivant, puis l'application vérifie pour voir si les modifications ont été faites..Ou, idéalement, il ne fait pas tout dur les modifications jusqu'à ce que l'utilisateur clique sur "OK" à la fin..De cette façon, toutes les modifications sont enregistrées et vous pouvez les remplir de nouveau le formulaire basé sur les valeurs précédemment saisies sur la charge, à chaque fois..

J'espère qu'un sens :)

La RFC 2616 §13.13 dit que L'historique et le Cache sont des choses différentes.Il devrait y avoir absolument aucun moyen pour le cache pour affecter la touche Retour.

Si n'importe quelle combinaison des en-têtes HTTP affecte bouton de Retour, c'est un bug dans le navigateur ...à une exception près.

En HTTPS les navigateurs n'interprètent Cache-control: must-revalidate comme la demande pour actualiser les pages lors de l'Arrière bouton est utilisé (Mozilla appelle "l'idiot de la banque en mode").Ce n'est pas pris en charge dans la plaine HTTP.

La meilleure façon de traiter avec elle est probablement à mettre une directive no-cache dans votre ASP.NET pages du site (ou une page maître, si vous en utilisez un).Je ne pense pas qu'il y a une façon de traiter avec ce directement dans votre ASP.NET code (depuis le cache de décision qui se passe sur le client).

Comme pour MVC, je ne sais pas comment tu le ferais que (en supposant que c'est différent de Web basée sur les Formulaires ASP.NET);Je ne l'ai pas utilisé.

Le code suivant a travaillé pour moi dans IE9+, FF21 et Dernier Chrome:

Response.Cache.SetCacheability(HttpCacheability.NoCache | HttpCacheability.Private);
Response.Cache.AppendCacheExtension("must-revalidate");
Response.Cache.AppendCacheExtension("max-age=0");
Response.Cache.SetNoStore();

Vous pouvez les placer dans un Page_Load() gestionnaire d'événement dans la MasterPage de sorte que chaque page de votre application nécessite un aller-retour vers le serveur lorsque vous appuyez sur le bouton retour.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top