Evitar cache con PHP

En esta ocasión veremos la forma de prevenir el cache de contenido con PHP. Normalmente cuando se accede a una página web, el browser guarda una copia para que en la siguiente ocasión que solicites esa página accedas de forma mas rápida.

Nuestro objetivo es evitar que el browser guarde el contenido de nuestras páginas, esto para que el usuario acceda siempre a la ultima información de nuestro web.

Evitando Cache
Para evitar cache de contenido, enviamos headers para los diferentes navegadores indicando que el contenido no se debe guardar en la memoria cache. Esto lo hacemos de la forma:

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");

Ahora bien, en caso que vayamos a utilizar esta función repetidas veces es conveniente contertir este código en una función.

// archivo: functions.php
function noCache() {
  header("Expires: Tue, 01 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");
}

Luego en cada página que deseamos prevenir cache, primero incluimos el archivo y luego llamamos a la función, esto se hace al inicio de toda página php.

include("function.php");
ae_nocache();
// codigo php

Como ven, con dos lineas adicionales a nuestras páginas podemos evitar el cache. Espero les sirva este tip que aunque es muy sencillo siempre hace falta.

Comentarios Total 27 comentarios

Rolf
Publicado: 05/02/2008 11:08 am

no hace falta crear ni llamar a la funcion sobra con:

al inicio del fichero .php

Rolf
Publicado: 05/02/2008 11:09 am

require_once(«function.php») :P

Hipergeo
Publicado: 05/03/2008 6:12 pm

Gracias, no encontraba todos esos headers, san google siempre muy veloz

Me gusto el diseño de la pagina apenas la vi… en realidad me gusta mucho el verde :P

Gracias

Juan Carlos
Publicado: 10/06/2008 10:08 am

Gracias por el aporte, siempre tan necesario.

IExplorer me estaba haciendo perder la paciencia…


[…] Enlace | unijimpe […]

Miguel Monroy
Publicado: 09/12/2008 2:57 pm

Muchas gracias, muy útil esta información

daniel
Publicado: 22/01/2009 12:52 pm

Gracias por la ayuda…

Saludos.

Daniel (-_-)

Epimenio Enrique Parra Ochoa
Publicado: 02/06/2009 9:11 am

Por que esa fecha? 01 Jul 2001 06:00:00 GMT

unijimpe
Publicado: 02/06/2009 10:23 am

Pues que esta fecha es del 2001 lo que le indica al browser que hace mucho tiempo que ya caduco la página con lo cual no hará una copia en el cache.

atx
Publicado: 03/06/2009 11:43 am

la llamada esta mal
[code]include("function.php");
ae_nocache();[/code]
deberia ser
[code]include("function.php");
ae_nocache();[/code]

atx
Publicado: 03/06/2009 11:45 am

perdon lo puse mal deberia ser
include(”function.php”);
nocache();
como el nombre de la funcion sino daria un error de que la funcion no existe
saludos
atx

jhonvels
Publicado: 13/10/2009 9:12 am

este IE es una M….. no me funciona ni con esto, tengo reportes en pdf y cuando genero uno me carga el anterior

cusco
Publicado: 27/01/2010 8:27 pm

gracias por el dato estaba queriendo esto gracias

cusco
Publicado: 27/01/2010 8:30 pm

por cierto se podra dar ese header a un archivo especifico????

César Cancino
Publicado: 02/06/2010 4:59 pm

Hola, muchas gracias, como siempre tu web con contenidos muy útiles…saludos desde Santiago de Chile..

euskara
Publicado: 19/07/2010 9:56 am

Yea !!!

Me fue de mucha utilidad en especial

header(«Cache-Control: no-store, no-cache, must-revalidate»);

para no volver a cargar votos de una web !!!

Jorge
Publicado: 23/10/2010 2:39 pm

Muchas gracias por el aporte, llevaba una semana buscando la solucion.

Internet Explorer me tenia loco.

Juan Quiroz
Publicado: 26/10/2010 12:29 pm

Hola a todos, el problema es que en firefox esto no me funciona, el problema se da porque llamo una función que me descarga una imagen desde la base de datos. Estas cabeceras las pongo luego de colocar las cabeceras de tipo de archivo, muy bien el archivo se visualiza, pero si cambio para que me muestre otra imagen me muestra la anterior y solo se arregla si presiono ctrl + f5

Juan Quiroz
Publicado: 26/10/2010 1:27 pm

Retiro lo dicho, funciona perfectamente!!!!!

alejandro
Publicado: 08/12/2010 6:59 pm

hola amigos yo creo que soy un poco tapado pero no entiendo por que no quieren enviar el cache de sus web?? haciendo esto no cargarian mas rapidos?

daniel
Publicado: 17/01/2011 6:32 am

alejandro:
«hola amigos yo creo que soy un poco tapado pero no entiendo por que no quieren enviar el cache de sus web?? haciendo esto no cargarian mas rapidos?»

en muchas ocasiones es necesario que el contenido sea actualizado por ejemplo al enviar datos a una base de datos

Alfredo Gonzalez
Publicado: 29/09/2011 11:09 am

Hola yo tengo un problema con web services, utilizo php para el cliente cn nusoap y java para el servidor con glassfish, el problema que tengo es que aveces al modificar datos en la base de datos del servidor y recargar la pagina me trae datos anteriores a la modificación, las cabeceras de php que mencionan también sirven para estos casos??? Gracias desde mexico !!

GISELLE
Publicado: 17/04/2012 8:09 am

Hola soy diseñadora grafica, pero no entiendo casi nada de programcion y me anime a hacer esta pagina de actualizacion diaria…pero ahora tengo problemas: sucede que muchas veces no se ve la ultima actualizacion sino lo almacenado en el cache.
Le agregue unas etiquetas meta…

pero solo me resulta en IE y las versiones mas nuevas..firefox por ejemplo me sigue mostrando lo que tiene almacenado en el cache del dia anterior...otra cosa que me sucede es que en la pagina principal (index) clickeo en un link que me dirije a leer la nota completa y cuando pongo "regresar a la pagina principal" me vuelve a un index anterior o mas viejo"

Por favor si alguien que sepa me puede ayudar y en ese caso ser lo mas explicativo posible les estaria sumamente agradecida!!

CristiaN
Publicado: 05/08/2012 10:34 am

Muchas gracias, la verdad estaba acostumbrado a que PHP automaticamente no cacheara, pero en el ultimo sitio web que hice por alguna razón no era automatico.

gblumen
Publicado: 29/04/2014 10:14 am

hola, disculpen, yo hago pruebas con internet explorer 10, y no veo que se cachee imagenes ni nada, en que versiones de navegadores se cachean las paginas? o bajo que circunstancias, gracias y saludos

Gabriel Blumen
Publicado: 30/04/2014 8:18 am

no me funciona, mi archivo pdf sigue cacheado a pesar de que pongo ese codigo, ademas revise el cache y ni con ese codigo propuesto se borra la cache, alguna ayuda?

 

Comentar

En este blog los comentarios están moderados, serán mostrados cuando el administrador los apruebe. Por favor, evita comentarios ofensivos u obscenos por que no serán aprobados.
Si deseas publicar código fuente debes hacerlo entre las etiquedas <code> y </code>, además debes reemplazar los carácteres < por &lt; y > por &gt;.

(Requerido)

(Requerido, no será publicado)

(Requerido)

(Tags aceptados: <a> <em> <strong> <code> <ul> <li>)