Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/91.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何以编程方式清空浏览器缓存?_Javascript_Html_Caching_Browser - Fatal编程技术网

Javascript 如何以编程方式清空浏览器缓存?

Javascript 如何以编程方式清空浏览器缓存?,javascript,html,caching,browser,Javascript,Html,Caching,Browser,我正在寻找一种以编程方式清空浏览器缓存的方法。我这样做是因为应用程序缓存机密数据,我希望在您按“注销”时删除这些数据。这可以通过服务器或JavaScript实现。当然,在外国/公共计算机上使用该软件仍然是不被鼓励的,因为还有更多的危险,比如你在软件层面上无法战胜的钥匙记录器。浏览器无法让你清除其缓存。如果可能的话,这将是一个巨大的安全问题。这很容易被滥用——浏览器支持这种“功能”的那一刻就是我从计算机上卸载它的那一刻 您可以通过发送适当的标题或使用以下元标记来告诉它不要缓存页面: <met

我正在寻找一种以编程方式清空浏览器缓存的方法。我这样做是因为应用程序缓存机密数据,我希望在您按“注销”时删除这些数据。这可以通过服务器或JavaScript实现。当然,在外国/公共计算机上使用该软件仍然是不被鼓励的,因为还有更多的危险,比如你在软件层面上无法战胜的钥匙记录器。

浏览器无法让你清除其缓存。如果可能的话,这将是一个巨大的安全问题。这很容易被滥用——浏览器支持这种“功能”的那一刻就是我从计算机上卸载它的那一刻

您可以通过发送适当的标题或使用以下元标记来告诉它不要缓存页面:

<meta http-equiv='cache-control' content='no-cache'>
<meta http-equiv='expires' content='0'>
<meta http-equiv='pragma' content='no-cache'>

您可能还想考虑关闭“自动完成”表单字段,尽管我恐怕有一种标准的方法来完成它() 无论如何,我想指出,如果您使用的是敏感数据,那么应该使用SSL。如果您不使用SSL,任何有权访问网络的人都可以嗅探网络流量并轻松查看用户所看到的内容


使用SSL还使一些浏览器不使用缓存,除非明确要求使用。请参阅。

您可以简单地使用jQuery将引用缓存状态的“元标记”替换为事件处理程序/按钮,然后轻松刷新

$('.button').click(function() {
    $.ajax({
        url: "",
        context: document.body,
        success: function(s,x){

            $('html[manifest=saveappoffline.appcache]').attr('content', '');
                $(this).html(s);
        }
    }); 
});

注意:此解决方案依赖于作为HTML5规范的一部分实现的应用程序缓存。它还需要服务器配置来设置应用程序缓存清单。它没有描述一种通过客户端或服务器端代码清除“传统”浏览器缓存的方法,这几乎是不可能做到的。

在Chrome上,您应该能够使用基准测试扩展来实现这一点。您需要使用以下开关启动chrome:

./chrome --enable-benchmarking --enable-net-benchmarking 
现在,在Chrome的控制台中,您可以执行以下操作:

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

从上面的命令可以看出,它不仅清除浏览器缓存,还清除DNS缓存并关闭网络连接。当您进行页面加载时间基准测试时,这些都非常好。显然,如果不需要,您不必全部使用它们(例如,如果您只需要清除缓存,而不关心DNS缓存和连接,则clearCache()就足够了)。

最好的办法是使用名称生成js文件+使用版本生成一些哈希,如果您确实需要清除缓存,只需使用新哈希生成新文件即可,这将触发浏览器加载新文件

使用html本身。有一个技巧可以使用。这个技巧是在脚本标记中的文件名中附加一个参数/字符串,并在文件更改时对其进行更改


浏览器将整个字符串解释为文件路径,即使“?”后面的是参数。现在发生的事情是,下次更新文件时,只需更改网站上脚本标记中的编号(例如
),每个用户浏览器都会看到文件已更改并获取一个新副本。

想象一下
.js
文件放置在
/my site/some/path/ui/js/myfile.js

因此,通常脚本标记看起来像:

<script src="/my-site/some/path/ui/js/myfile.js"></script>
这样做的目的是,从路径中删除
1111111
,并链接到正确的路径

因此,如果您现在进行更改,只需将数字
1111111111
更改为您想要的任何数字即可。无论您如何包含您的文件,您都可以在js文件上次修改时通过时间戳设置该数字。因此,如果数字不变,缓存将正常工作。如果它改变了,它将服务于新文件(是的,总是),因为浏览器得到的是一个完整的新URL,只是认为该文件是如此新,他必须去得到它

您可以将其用于
CSS
favicons
以及缓存的内容。对于CSS,就这样使用吧

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

它会起作用的!易于更新,易于维护

承诺的完全访问权限

如果您没有.htaccess权限,则这是您在那里需要的最低权限:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

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

重新启动发动机
重写基/
重写规则^my site\/(.*)\/ui\-([0-9]+)\/(.*)my site/$1/ui/$3[L]
位置。重新加载(true);将硬加载当前页,忽略缓存。

也可用于新的chrome、firefox和opera。

最初,我在html、JS中尝试了各种编程方法来清除浏览器缓存。在最新的Chrome上没有任何功能

最后,我得到了.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>

标头设置缓存控制“无缓存,无存储,必须重新验证”
标题集Pragma“无缓存”
标题集过期0
在Chrome、Firefox和Opera中测试

参考资料:

您现在可以使用

例如:

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)
    }
  }));
适用于Chrome 40+、Firefox 39+、Opera 27+和Edge。

//下面的代码应该放在名为“clear browser cache.js”的“js”文件夹中
(功能(){
var进程脚本=false;
变量rep=/.\?.*/,,
links=document.getElementsByTagName('link'),
scripts=document.getElementsByTagName('script');
var值=document.getElementsByName('clear-browser-cache');
对于(变量i=0;i<IfModule mod_headers.c>
    Header set Cache-Control "no-cache, no-store, must-revalidate"
    Header set Pragma "no-cache"
    Header set Expires 0
</IfModule>
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)
    }
  }));
caches.keys().then((keyList) => Promise.all(keyList.map((key) => caches.delete(key))))
Clear-Site-Data: "cache", "cookies", "storage"