我正在寻找一种以编程方式清空浏览器缓存的方法。我这样做是因为应用程序缓存了机密数据,当您按“注销”时,我想删除这些数据。这将通过服务器或JavaScript发生。当然,仍然不鼓励在外国/公共计算机上使用该软件,因为还有诸如键盘记录程序之类的更多危险,您无法在软件级别上克服这些危险。
我正在寻找一种以编程方式清空浏览器缓存的方法。我这样做是因为应用程序缓存了机密数据,当您按“注销”时,我想删除这些数据。这将通过服务器或JavaScript发生。当然,仍然不鼓励在外国/公共计算机上使用该软件,因为还有诸如键盘记录程序之类的更多危险,您无法在软件级别上克服这些危险。
Answers:
有可能,您可以简单地使用jQuery用事件处理程序/按钮替换引用缓存状态的“元标记”,然后进行刷新,轻松,
$('.button').click(function() {
$.ajax({
url: "",
context: document.body,
success: function(s,x){
$('html[manifest=saveappoffline.appcache]').attr('content', '');
$(this).html(s);
}
});
});
注意:此解决方案依赖于作为HTML 5规范的一部分实现的应用程序缓存。它还需要服务器配置才能设置应用程序缓存清单。它没有描述一种可以通过客户端或服务器端代码清除“传统”浏览器缓存的方法,这几乎是不可能的。
有没有办法浏览器会让你清除缓存。如果可能的话,这将是一个巨大的安全问题。这很容易被滥用-浏览器支持这种“功能”的那一刻就是我从计算机上卸载它的那一刻。
您可以做的是通过发送适当的标题或使用以下元标记来告诉它不要缓存您的页面:
<meta http-equiv='cache-control' content='no-cache'>
<meta http-equiv='expires' content='0'>
<meta http-equiv='pragma' content='no-cache'>
您可能还想考虑关闭表单字段上的自动完成功能,尽管恐怕有一种标准的方法(请参阅此问题)。
无论如何,我想指出的是,如果您要使用敏感数据,则应使用SSL。如果您不使用SSL,则有权访问网络的任何人都可以嗅探网络流量并轻松查看您的用户所看到的内容。
除非明确告知,否则使用SSL还会使某些浏览器不使用缓存。看到这个问题。
使用html本身。有一个技巧可以使用。该技巧是在脚本标记中的文件名后附加参数/字符串,并在文件更改时对其进行更改。
<script src="myfile.js?version=1.0.0"></script>
浏览器将整个字符串解释为文件路径,即使“?”之后是什么。是参数。因此,现在发生的麻烦是,下次更新文件时,只需更改网站上脚本标签中的数字(示例<script src="myfile.js?version=1.0.1"></script>
),每个用户浏览器都将看到文件已更改并获取新副本。
ctime
,(或mtime
),则只需在文件后面加上上述时间即可。例如,在php中,myfile.js?v=<?=filectime('myfile.js');?>
您将获得一个针对资源的自动更新缓存。
最初,我尝试在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>
在Chrome,Firefox,Opera中经过测试
location.reload(true); 将硬重载当前页面,而忽略缓存。
Cache.delete()也可以用于新的chrome,firefox和Opera。
在Chrome上,您应该可以使用基准测试扩展程序执行此操作。您需要使用以下开关启动chrome:
./chrome --enable-benchmarking --enable-net-benchmarking
现在,在Chrome浏览器的控制台中,您可以执行以下操作:
chrome.benchmarking.clearCache();
chrome.benchmarking.clearHostResolverCache();
chrome.benchmarking.clearPredictorCache();
chrome.benchmarking.closeConnections();
从上面的命令可以看出,它不仅清除浏览器缓存,而且清除DNS缓存并关闭网络连接。当您执行页面加载时间基准测试时,这些功能很棒。显然,如果不需要,则不必全部使用它们(例如,如果只需要清除缓存并且不关心DNS缓存和连接,那么clearCache()就足够了)。
//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 >
您现在可以使用Cache.delete()
例:
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。
想象一下.js
文件放置在/my-site/some/path/ui/js/myfile.js
因此,通常,脚本标签如下所示:
<script src="/my-site/some/path/ui/js/myfile.js"></script>
现在将其更改为:
<script src="/my-site/some/path/ui-1111111111/js/myfile.js"></script>
现在当然不行了。要使其正常工作,您需要在您.htaccess
的行中添加一行或几行。重要的行是:(整个底部是.htaccess)
RewriteRule ^my-site\/(.*)\/ui\-([0-9]+)\/(.*) my-site/$1/ui/$3 [L]
因此,这样做是1111111111
从路径中删除并链接到正确的路径。
因此,现在,如果您进行更改,则只需将数字更改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
如果您还没有.htaccess,那么这是您需要具备的最低权限:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^my-site\/(.*)\/ui\-([0-9]+)\/(.*) my-site/$1/ui/$3 [L]
</IfModule>