如何使用PHP清除浏览器缓存?

62

如何使用PHP清除浏览器缓存?


8
你的意思是如何防止我的内容被缓存。如果没有预先安装的软件(如activeX等)具有广泛的权限来修改用户系统,就无法从服务器上清除浏览器缓存。你无法清空浏览器缓存。 - anddoutoi
4个回答

61
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Content-Type: application/xml; charset=utf-8");

4
每次清理缓存并不总是最好的选择,可能值得研究一下。 - Jon Winstanley
6
这里的Content-Type是一个误导性线索。 - Kornel
31
这并不会清除用户的浏览器缓存。但是它会告诉浏览器不要缓存这个特定的页面。 - DA.
2
一个不必教客户如何清除缓存的好方法。 - Glorious Kale
1
这段代码对我不起作用...我必须手动重新加载页面。 - always-a-learner
这将防止受影响资源的未来缓存,但仍不清除现有缓存。 - pschichtel

41

您可以通过设置以下标头来删除浏览器缓存:

<?php
header("Expires: Tue, 01 Jan 2000 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
?>

这对我有用。我试图预览一个6MB的PDF文件。我的脚本适用于小型PDF文件,但不适用于超过3MB的文件。 - user2439124
这是清除缓存的方法,包括已加载的音频或图像文件路径。 - Rowf Abd
3
这不会清除已经存在的缓存。如果浏览器之前已经访问过该页面并且头部设置为缓存,那么它很可能只会加载缓存文件,直到用户手动刷新内容,才会收到新的no-cache头信息。 - Peter Cullen

4

最近浏览器支持"Clear-Site-Data"头部,您可以清除不同类型的数据: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Clear-Site-Data

header('Clear-Site-Data: "cache", "cookies", "storage", "executionContexts"');


(说明:该段内容为介绍如何使用"Clear-Site-Data"头部清除网站缓存、Cookie、存储等数据类型的PHP代码)

1

看起来你需要版本控制,这样当发生一些更改时,浏览器会捕获到新的内容,用户不需要清除浏览器缓存。

你可以通过子文件夹(例如/css/v1/style.css)或文件名(例如:css/style_v1.css)进行版本控制,甚至可以为你的网站设置不同的文件夹,例如:

www.mywebsite.com/site1

www.mywebsite.com/site2

www.mywebsite.com/site3

您可以使用 .htaccess 文件,甚至更改 httpd.conf 文件来重定向到您当前的应用程序。

如果是关于 一个 图片或者 页面

    <?$time = date("H:i:s");?>
    <img src="myfile.jpg?time=<?$time;?>">

当您不想缓存时,可以在部分中使用 $time。因此,它将始终拉取新的图像。版本控制似乎是更好的方法,否则它可能会使您的服务器超载。请记住,浏览器缓存不仅对用户体验有好处,而且对您的服务器也有好处。


唯一的问题是,如果浏览器只是从缓存中加载页面,它不会向服务器发送请求,无论你在服务器上做什么都没有用。但是,如果页面重新加载但资源没有重新加载,这种方法是有效的,我经常发现即使手动强制刷新浏览器(例如,Shift + 刷新),资源也没有重新加载。Chrome似乎是最糟糕的,我曾经为了满足使用Chrome的客户而苦恼不已。 - undefined
这将打印出 myfile.jpg?time=,因为你没有打印出 $time。你需要这样写:<img src="myfile.jpg?time=<?print $time;?>"> - undefined

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