Algunos programadores se encuentran con problemas a la hora de refrescar una página web porque a veces la caché nos incordia ofreciendo resultados antiguos.
A mi concretamente me ha pasado en los formularios, cuando se cambia los valores de un «Select» y al refrescar la página, el «Select» del formulario sigue sin cambiar, y eso aunque tenga activado la etiqueta «select» : selected=»selected».
Para desconectar o evitar la cache, he reunido los siguientes trucos, espero que le sea útil a algún programador de webs:
Evitar la caché en los formularios
En todos los elementos «problematicos» en el form, como los select, hay que escribir: autocomplete=»off»
Por ejemplo, en un «Select» se haría así:
<select name="OnOff10" id="OnOff10" autocomplete="off"> <option value="0">Off</option> <option value="1">On</option> </select>
Evitar la caché con ASP
En programación con ASP, para no tener caché al inicio del código se utiliza lo siguiente :
<% Response.CacheControl = "no-cache" Response.AddHeader "Pragma", "no-cache" Response.Expires = -1 %>
Evitar la caché con PHP
Para forzar saltar la caché en programación con PHP, al inicio del código se utiliza lo siguiente :
<$$$ header( "Expires: Mon, 20 Dec 1998 01:00:00 GMT" ); header( "Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT" ); header( "Cache-Control: no-cache, must-revalidate" ); header( "Pragma: no-cache" ); $$$>
NOTA: sustituir donde pone «$$$» por el caracter «?», ya que mi WordPress no me deja ponerlo correctamente.
Evitar la caché de una imagen con PHP
Para que una imagen no quede en la caché y siempre se refresque, se puede utilizar lo siguiente:
<img src="image.php?id?12<$$$=date(ymdHi)$$$>" />
NOTA: sustituir donde pone «$$$» por el caracter «?», ya que mi WordPress no me deja ponerlo correctamente.
Evitar la caché con HTML
En el HTML hay que poner lo siguiente entre las etiquetas <HEAD> y </HEAD>:
<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Expires" CONTENT="-1">
Evitar la caché con JavaScript
Utilizando Javascript, se puede poner el siguiente código en la etiqueta <BODY>, por ejemplo:
<BODY onLoad="if ('Navigator' == navigator.appName) document.forms[0].reset();">
Y esto es todo, si alguien tiene más formas, que las escriba en los comentarios. :)
15 comentarios
Saltar al formulario de comentarios
Me sirvio mucho la info, gracias
Resolviste mi problema, gracias!
socrates disculpa, usando el metodo que propones de manejar el querystring, no crees que se llenaria en algun momento la cache del navegador de los visitantes?que recomiendas en dicho caso?
Autor
Hola gblumen, depende del tamaño de la caché que tengas asignada en el navegador (generalmente entre 5 y 50MB), pero en todo caso, cuando la caché se llena, va vaciándose borrando los archivos más antiguos que tenga. Cuando digo más antiguos, me refiero que son los que hace más tiempo que no se accede a ellos.
Hola este codigo lo tendria que poner en .htaccess?
Autor
Hola Banel, ¿a cual código de todos te refieres? Cada código se pone en su idioma correspondiente (el de HTML y Javascript en el HTML, el de PHP en el código PHP, etc). No hay ninguno para .htaccess.
Quiero poner el de HTML como lo pondira entonces?
Autor
Banel: ¿te has leído el artículo? :/
Gracias por el aporte
Tengo una aplicación voluminosa (HTML, CSS, Javascript, PHP, MySQL) y después de mucho rodaje observo que la caché perturba más que ayuda. Me gustaría no utilizarla para nada, ¿he de replicar las secuencias de código referenciadas en todos los programas ?
Muchas gracias.
Autor
¿Replicar las secuencias de código? ¿qué secuencias? No entiendo…
Hola, lo he implementado en ASP.NET C# pero no me funciona.
¿Que debo de agregar? Siempre me almacena imágenes en cache
Autor
Para eliminar la caché en ASP.NET C#, puedes probar con alguno o varios de estos trucos:
1.- Con esta línea se borra un elemento que tenga la clave llamada miClave:
Cache.Remove(«miClave»);
2.- O con esta línea, que en teoría te la borra toda (si es que por defecto tienes la cache en esa ruta):
HttpResponse.RemoveOutputCacheItem(«/caching/CacheForever.aspx»);
3.- O puedes mirar en http://stackoverflow.com/questions/11585/clearing-page-cache-in-asp-net que está el truco anterior y algunos más.
Espero que te ayude, si te acuerdas ya me dirás por aquí si funciona.
Estoy desarrollando una app y me gustaría integran un boton para borrar la cache del movil ¿Como haría eso?
Gracias hermano, por tu ayuda