Como esvaziar o cache do navegador por meio de programação?

Eu estou procurando uma maneira de esvaziar programaticamente o cache do navegador. Eu estou fazendo isso porque o aplicativo armazena dados confidenciais e eu gostaria de removê-los quando você pressiona “log out”. Isso aconteceria via servidor ou JavaScript. É claro que usar o software em computadores estrangeiros / públicos ainda é desencorajado, pois há mais perigos, como keyloggers, que você não pode derrotar no nível do software.

   

É possível, você pode simplesmente usar o jQuery para replace a ‘meta tag’ que referencia o status do cache com um manipulador de events / botão, e então atualizar, fácil,

$('.button').click(function() { $.ajax({ url: "", context: document.body, success: function(s,x){ $('html[manifest=saveappoffline.appcache]').attr('content', ''); $(this).html(s); } }); }); 

Observação: esta solução depende do cache de aplicativo que é implementado como parte da especificação de HTML 5. Também requer configuração do servidor para configurar o manifesto do App Cache. Ele não descreve um método pelo qual é possível limpar o cache do navegador ‘tradicional’ por meio de código do lado do cliente ou do servidor, o que é quase impossível de fazer.

Não há como um navegador permitir que você limpe seu cache. Seria uma questão de segurança enorme se isso fosse possível. Isso pode ser muito facilmente abusado – no minuto em que um navegador suportar esse “recurso” será o minuto em que eu o desinstalar do meu computador.

O que você pode fazer é dizer para não armazenar em cache sua página, enviando os headers apropriados ou usando estas metatags:

    

Você também pode querer considerar desativar o preenchimento automático em campos de formulário, embora eu receie que exista uma maneira padrão de fazer isso ( consulte esta pergunta ).

Independentemente disso, gostaria de salientar que, se você estiver trabalhando com dados confidenciais, deverá usar o SSL. Se você não estiver usando SSL, qualquer pessoa com access à rede poderá detectar o tráfego de rede e ver facilmente o que seu usuário está vendo.

O uso do SSL também faz com que alguns navegadores não usem o armazenamento em cache, a menos que seja explicitamente informado para. Veja esta questão .

use o próprio html. Há um truque que pode ser usado. O truque é acrescentar um parâmetro / string ao nome do arquivo na tag de script e alterá-lo quando você fizer alterações.

O navegador interpreta toda a string como o caminho do arquivo, embora o que vem depois do “?” são parâmetros. Então, o que acontece agora é que da próxima vez que você atualizar o seu arquivo apenas mude o número na tag de script do seu site (Exemplo ) e cada usuário navegador irá ver o arquivo foi alterado e pegue uma nova cópia.

A melhor idéia é fazer a geração de arquivos js com nome + algum hash com a versão, se você precisar limpar o cache, apenas gerar novos arquivos com novo hash, isso irá triggersr o navegador para carregar novos arquivos

No Chrome, você poderá fazer isso usando a extensão de comparativo de mercado. Você precisa iniciar seu cromo com as seguintes opções:

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

No console do Chrome, agora você pode fazer o seguinte:

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

Como você pode dizer pelos comandos acima, ele não apenas limpa o cache do navegador, mas também limpa o cache DNS e fecha as conexões de rede. Estes são ótimos quando você está fazendo benchmarking de tempo de carregamento da página. Obviamente, você não precisa usá-los se não for necessário (por exemplo, clearCache () deve ser suficiente se você precisar limpar apenas o cache e não se importar com o cache e as conexões DNS).

location.reload (true); será difícil recarregar a página atual, ignorando o cache.
Cache.delete () também pode ser usado para novos chrome, firefox e opera.

Inicialmente eu tentei várias abordagens programáticas no meu html, JS para limpar o cache do navegador. Nada funciona no Chrome mais recente.

Finalmente, acabei com o .htaccess:

  Header set Cache-Control "no-cache, no-store, must-revalidate" Header set Pragma "no-cache" Header set Expires 0  

Testado no Chrome, Firefox, Opera

Referência: https://wp-mix.com/disable-caching-htaccess/

Imagine que os arquivos .js sejam colocados em /my-site/some/path/ui/js/myfile.js

Então, normalmente, a tag do script seria semelhante a:

  

Agora mude isso para:

  

Agora é claro que isso não funcionará. Para fazê-lo funcionar, você precisa adicionar uma ou algumas linhas ao seu .htaccess A linha importante é: (inteiro .htaccess na parte inferior)

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

Então, o que isso faz é remover o 1111111111 do caminho e vincular ao caminho correto.

Então, agora, se você fizer alterações, basta alterar o número 1111111111 para o número que quiser. E, no entanto, você inclui seus arquivos e pode definir esse número por meio de um registro de data e hora quando o arquivo js tiver sido modificado pela última vez. Então, o cache funcionará normalmente se o número não mudar. Se ele mudar, ele servirá o novo arquivo (YES SEMPRE), porque o navegador obtém um novo URL completo e acredita que o arquivo é tão novo que ele deve obtê-lo.

Você pode usar isso para CSS , favicons e o que for colocado em cache. Para CSS, é só usar assim

  

E vai funcionar! Simples de atualizar, simples de manter.

O prometido full .htaccess

Se você não tiver o .htaccess, este é o mínimo que você precisa ter lá:

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

Agora você pode usar Cache.delete ()

Exemplo:

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

Funciona no Chrome 40+, no Firefox 39+, no Opera 27+ e no Edge.

 //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 >