如何防止浏览器缓存图片?

8

如何在PHP中防止浏览器缓存图片?

我尝试使用header()方法:

header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");
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");

但是似乎只有手动清除浏览器缓存才能起作用。
我有一些被替换成相同名称的图片,例如 avatar.png 作为可更新的用户头像,但当它被更新时,浏览器仍然保留旧版本。
即使原始文件已删除并添加了新文件,浏览器仍然保留旧的 avatar.png
有什么想法吗?
4个回答

20
只需在图像URL末尾添加一个随机参数即可。时间戳也可以很好地使用此方法。
例如,在PHP中:
"http://domain.com/img.png?t=" . time();

浏览器将始终加载此图像。尽管如此,您应该谨慎使用它,因为它会使加载时间变慢。

运行得非常好!感谢你的提示! - k_sel
3
不好的想法。每次显示图像时都会强制从服务器重新加载,这完全是不必要的。而且你没有提到设置头文件以防止缓存,因此每个重新加载的图像都将被单独缓存,无论是在你的计算机上还是在你和服务器之间的任何中间缓存上。wIRELESS的建议要好得多,而且同样简单易行。 - Doin

6

1
实际上,大多数缓存破坏机制都使用类似的方法。必须注意,一些代理服务器会忽略查询部分,因此最好使用类似这样的东西:"http://example.com/img".filetime($imgPath).".jpg",然后用.htaccess去除数字部分。 - user188654

2

在同一浏览会话中,如果使用相同的IMG src,无论缓存设置如何,浏览器通常会重复使用其在内存中保留的图像副本。这似乎是在这里发生的情况。

我总结了一些常见的解决“更新图像”问题的方法在这里


-2

谢谢,这对我来说是这样运行的

没有运行<

echo "&lt;img src='gambarLimas.jpg'><br>"; 

运行良好

echo "&lt;img src='gambarLimas.jpg?t=".time()."'><br>"; 

嘿Dody,尝试使用标签来分隔代码,并通过注释解释你的解决方案为什么有效。欢迎加入社区。 - ksloan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接