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.

2voto

haimirick Points 29
//The code below should be put in the "js" folder with the name "clear-browser-cache.js"

(function () {
    var process_scripts = false;
    var rep = /.*\?.*/,
    links = document.getElementsByTagName('link'),
    scripts = document.getElementsByTagName('script');
    var value = document.getElementsByName('clear-browser-cache');
    for (var i = 0; i < value.length; i++) {
        var val = value[i],
            outerHTML = val.outerHTML;
        var check = /.*value="true".*/;
        if (check.test(outerHTML)) {
            process_scripts = true;
        }
    }
    for (var i = 0; i < links.length; i++) {
        var link = links[i],
        href = link.href;
        if (rep.test(href)) {
            link.href = href + '&' + Date.now();
        }
        else {
            link.href = href + '?' + Date.now();
        }
    }
    if (process_scripts) {
        for (var i = 0; i < scripts.length; i++) {
            var script = scripts[i],
            src = script.src;
            if (src !== "") {
                if (rep.test(src)) {
                    script.src = src + '&' + Date.now();
                }
                else {
                    script.src = src + '?' + Date.now();
                }
            }
        }
    }
})();

At the end of the tah head, place the line at the code below

    < script name="clear-browser-cache" src='js/clear-browser-cache.js' value="true" >< /script >

4 votes

Il n'est pas clair comment cette réponse fonctionne et en quoi elle est meilleure que les nombreuses réponses existantes. Cette réponse pourrait être grandement améliorée par une description de l'approche que vous suivez, ainsi que par des documents justificatifs montrant pourquoi cela fonctionne.

0 votes

Bien qu'appréciée, cette méthode n'efface pas le cache du navigateur, elle semble supprimer le cache de tous les liens de la page donnée simplement en ajoutant des paramètres.

0voto

caramba Points 2349

Imaginez la .js sont placés dans /my-site/some/path/ui/js/myfile.js

Donc, normalement, la balise script devrait ressembler à ceci :

<script src="/my-site/some/path/ui/js/myfile.js"></script>

Maintenant, changez ça en :

<script src="/my-site/some/path/ui-1111111111/js/myfile.js"></script>

Maintenant, bien sûr, cela ne fonctionnera pas. Pour que cela fonctionne, vous devez ajouter une ou plusieurs lignes à votre fichier .htaccess La ligne importante est : (tout le .htaccess en bas)

RewriteRule ^my-site\/(.*)\/ui\-([0-9]+)\/(.*) my-site/$1/ui/$3 [L]

Donc ce que ça fait, c'est que ça enlève en quelque sorte le 1111111111 du chemin et renvoie au chemin correct.

Donc maintenant, si tu fais des changements, tu dois juste changer le numéro. 1111111111 au nombre que vous voulez. Et quelle que soit la façon dont vous incluez vos fichiers, vous pouvez définir ce nombre via un horodatage de la dernière modification du fichier js. Le cache fonctionnera donc normalement si le nombre ne change pas. S'il change, il servira le nouveau fichier (OUI TOUJOURS) parce que le navigateur reçoit une nouvelle URL complète et croit que ce fichier est si nouveau qu'il doit aller le chercher.

Vous pouvez l'utiliser pour CSS , favicons et ce qui est mis en cache. Pour les CSS, il suffit d'utiliser comme suit

<link href="http://my-domain.com/my-site/some/path/ui-1492513798/css/page.css" type="text/css" rel="stylesheet">

Et ça va marcher ! Simple à mettre à jour, simple à entretenir.

Le .htaccess complet promis

Si vous n'avez pas encore de fichier .htaccess, c'est le minimum que vous devez avoir :

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteRule ^my-site\/(.*)\/ui\-([0-9]+)\/(.*) my-site/$1/ui/$3 [L]
</IfModule>

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