php通过header()函数禁止浏览器使用缓存

时间:2016-11-03
php header()函数可以发送特定的信息到HTTP标头,利用该函数的这一特性,我们可以使用该函数发送特定的缓存控制原始HTTP标头,从而强制浏览器不使用缓存。

一般我们要查看网上的一个网页,那么当您第一次访问这个网页的时候,系统首先要将这个网页下载到您的本地计算机的一个临时文件夹中进行缓存,当在一定的时间内,您第二次、第三次来访问这个网页的时候,浏览器就直接从您的本地计算机的临时文件夹中读取这个文件显示,这样做的好处就是避免每次都要重新下载而占用大量的时间和网络资源,不得不说页面的缓存加快了网页的显示,当然也有它的坏处,例如当服务器上的网页己经更新,而本地显示的还是没有更新的网页,这样就不能及时的显示更新后的内容,在某些情况下,我们需要禁止浏览器缓存,以使我们每次看到的页面都是最新的页面(例如后台操作、大型网站的实时新闻页面),这时我们就要禁用浏览器缓存。

一、对于静态页(就是通过meta标签来设置):

<!--expires用于设定网页的过期时间,一旦过期就必须从服务器上重新加载.时间必须使用GMT格式-->
<meta http-equiv="expires" content="0" />

或者通过pragma no-cache来设置,pragma出现在http-equiv属性中,使用content属性的no-cache值表示是否缓存网页(为了提高速度一些浏览器会缓存浏览者浏览过的页面,通过下面的定义,浏览器一般不会缓存页面,而且浏览器无法脱机浏览)。

<meta http-equiv="pragma" content="no-cache" />

Cache-Control:即缓存控制,指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。 请求时的缓存指令有 no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached等,响应消息中的指令有 public、private、no-cache、no-store、no-transform、must-revalidate、 proxy-revalidate、max-age。各个消息中的部分指令含义如下:

Public:指示响应可被任何缓存区缓存。 
Private:指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。 
no-cache:指示请求或响应消息不能缓存 
no-store:用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。 
max-age:指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。 
min-fresh:指示客户机可以接收响应时间小于当前时间加上指定时间的响应。 
max-stale:指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。

注意:Cache-Control 头标是在HTTP1.1里添加的,相对于其他几种方式能够实现更细致的缓存控制。

<meta http-equiv="Cache-Control" content="no-cache,no-store, must-revalidate">
header('Cache-Control: max-age=3600*24');//缓存1天,表示最大生存期是1天,超过1天浏览器必须去服务器重新读取,这个时间是从用户第一次读取页面时开始计时的

二、php禁止浏览器使用缓存页面

通过php的header()函数,发送特定的缓存控制原始HTTP标头,就可以实现了。具体代码如下:

<?php   
  
//设置此页面的过期时间(用格林威治时间表示),只要是已经过去的日期即可。   
header("Expires: Mon, 26 Jul 1970 05:00:00 GMT");     
  
//设置此页面的最后更新日期(用格林威治时间表示)为当天,可以强制浏览器获取最新资料  
// 作者: http://www.manongjc.com 
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");     
  
//告诉客户端浏览器不使用缓存,HTTP 1.1 协议   
header("Cache-Control: no-cache, must-revalidate");     
  
//告诉客户端浏览器不使用缓存,兼容HTTP 1.0 协议   
header("Pragma: no-cache");   
  
?>