157 votes

Comment vider le cache du navigateur de manière programmatique ?

Je cherche un moyen de vider le cache du navigateur de manière programmatique. Je fais cela parce que l'application met en cache des données confidentielles et j'aimerais les supprimer lorsque vous appuyez sur "log out". Cela se ferait soit par le serveur, soit par JavaScript. Bien entendu, il est toujours déconseillé d'utiliser le logiciel sur un ordinateur étranger ou public, car il existe d'autres dangers, comme les enregistreurs de frappe, qui ne peuvent pas être éliminés au niveau du logiciel.

3 votes

Quels navigateurs ? Vous devriez également envisager de dire au navigateur ce qu'il ne doit pas mettre en cache depuis le serveur plutôt que d'essayer de l'effacer.

1 votes

Vous pouvez également consulter ce tutoriel sur la mise en cache et son fonctionnement. mnot.net/cache_docs couvre les en-têtes de contrôle du cache et des choses comme ça

0 votes

@MechSoftware Je veux mettre en cache pour accélérer le chargement des pages, mais je veux l'effacer après la déconnexion. Il est préférable d'avoir un support de navigateur aussi bon que possible.

7voto

rajagopalx Points 1086

Au départ, j'ai essayé diverses approches programmatiques dans mon html, JS pour effacer le cache du navigateur. Rien ne fonctionne sur la dernière version de Chrome.

Finalement, je me suis retrouvé avec .htaccess :

<IfModule mod_headers.c>
    Header set Cache-Control "no-cache, no-store, must-revalidate"
    Header set Pragma "no-cache"
    Header set Expires 0
</IfModule>

Testé dans Chrome, Firefox, Opera

Référence : https://wp-mix.com/disable-caching-htaccess/

1 votes

C'est la meilleure solution.

7voto

kakhkAtion Points 81

Sur Chrome, vous devriez pouvoir le faire en utilisant l'extension d'analyse comparative. Vous devez démarrer votre chrome avec les commutateurs suivants :

./chrome --enable-benchmarking --enable-net-benchmarking 

Dans la console de Chrome, vous pouvez maintenant faire ce qui suit :

chrome.benchmarking.clearCache();
chrome.benchmarking.clearHostResolverCache();
chrome.benchmarking.clearPredictorCache();
chrome.benchmarking.closeConnections();

Comme vous pouvez le constater à partir des commandes ci-dessus, il ne se contente pas d'effacer le cache du navigateur, mais efface également le cache DNS et ferme les connexions réseau. Ces fonctions sont très utiles pour évaluer le temps de chargement des pages. Évidemment, vous n'êtes pas obligé de les utiliser toutes si ce n'est pas nécessaire (par exemple, clearCache() devrait suffire si vous avez besoin de vider le cache uniquement et que vous ne vous souciez pas du cache DNS et des connexions).

6voto

Mårten Wikström Points 3412

Vous pourriez demander au serveur de répondre avec un Effacer les données du site qui demande à l'agent utilisateur d'effacer les données stockées localement sur le site.

Par exemple :

Clear-Site-Data: "cache", "cookies", "storage"

Cet en-tête indiquerait à l'agent utilisateur d'effacer toutes les données stockées localement, notamment :

  • Cache réseau
  • Caches de l'agent utilisateur (comme les pages préenregistrées, les caches de script, etc.)
  • Cookies
  • Références d'authentification HTTP
  • Jetons liés à l'origine (tels que l'ID du canal et le Token Binding)
  • Stockage local
  • Stockage de la session
  • IndexedDB
  • Base de données Web SQL
  • Enregistrements des travailleurs sociaux

Vous pouvez envoyer la demande en utilisant fetch() et faire location.reload() après pour avoir un nouveau départ.

5voto

Jay Shah Points 1303

Location.reload(true) ; rechargera la page actuelle en ignorant le cache.
Cache.delete() peut également être utilisé pour les nouveaux chrome, firefox et opera.

0 votes

Cette fonction ne fonctionne pas avec les navigateurs Internet Explorer et Safari. Pas sûr qu'elle fonctionne avec Microsoft Edge.

5voto

r.delic Points 581

Vous pouvez maintenant utiliser Cache.delete()

Ejemplo:

let id = "your-cache-id";
// you can find the id by going to 
// application>storage>cache storage 
// (minus the page url at the end)
// in your chrome developer console 

caches.open(id)
.then(cache => cache.keys()
  .then(keys => {
    for (let key of keys) {
      cache.delete(key)
    }
  }));

Fonctionne sur Chrome 40+, Firefox 39+, Opera 27+ et Edge.

2 votes

Meilleure réponse. Fonctionne parfaitement

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X