Armin Ronacher有正确的想法.问题是随机字符串可能会发生冲突.我会用:
其中"1222259157.415"是服务器上的当前时间.(注意:我使用python的time.time()来生成)
Armin Ronacher有正确的想法.问题是随机字符串可能会发生冲突.我会用:
其中"1222259157.415"是服务器上的当前时间.(注意:我使用python的time.time()来生成)
简单修复:将随机查询字符串附加到图像:
HTTP RFC说的是什么:
Cache-Control: no-cache
但那不是很好:)
我使用PHP的文件修改时间函数,例如:
echo ";
如果更改图像,则使用新图像而不是缓存图像,因为具有不同的修改时间戳.
我会用:
其中"20130910043254"是文件的修改时间.
上传图像时,其文件名不会保留在数据库中.它被重命名为Image.jpg(在使用时简单地说出来).使用新图像替换现有图像时,名称也不会更改.只是图像文件的内容发生了变化.
我认为有两种类型的简单解决方案:1)首先想到的解决方案(直截了当的解决方案,因为它们很容易想出来),2)你在思考之后最终得到的解决方案(因为它们很容易使用).显然,如果你选择考虑事情,你不会总是受益.但我相信,第二种选择被低估了.试想为什么php
如此受欢迎;)
您可以编写一个代理脚本来提供图像 - 虽然这有点多了.有点喜欢这个:
HTML:
脚本:
// PHP if( isset( $_GET['img'] ) && is_file( IMG_PATH . $_GET['img'] ) ) { // read contents $f = open( IMG_PATH . $_GET['img'] ); $img = $f.read(); $f.close(); // no-cache headers - complete set // these copied from [php.net/header][1], tested myself - works header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Some time in the past header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); // image related headers header('Accept-Ranges: bytes'); header('Content-Length: '.strlen( $img )); // How many bytes we're going to send header('Content-Type: image/jpeg'); // or image/png etc // actual image echo $img; exit(); }
实际上,图像src上的无缓存标头或随机数应该足够了,但是因为我们想要防弹..
使用Class =“ NO-CACHE”
范例html:
jQuery的:
$(document).ready(function () { $('.NO-CACHE').attr('src',function () { return $(this).attr('src') + "?a=" + Math.random() }); });
javascript:
var nods = document.getElementsByClassName('NO-CACHE'); for (var i = 0; i < nods.length; i++) { nods[i].attributes['src'].value += "?a=" + Math.random(); }
结果:src =“ images / img1.jpg” => src =“ images / img1.jpg?a = 0.08749723793963926”
我是一个新的编码器,但这是我想出来的,阻止浏览器缓存并保持我的网络摄像头视图:
不知道什么在什么浏览器上工作,但它确实适用于某些人:IE:当网页刷新和网站重新访问时(无需刷新).CHROME:仅在刷新网页时才有效(即使在重新访问后).SAFARI和iPad:不起作用,我必须清除历史和Web数据.
关于SAFARI/iPad的任何想法?