Evitar la cache en programación ASP, PHP, Javascript, HTML y en formularios

programacionAlgunos 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. :)

programacion2

15 comentarios

Saltar al formulario de comentarios

    • unknown el julio 12, 2012 a las 4:32 pm
    • Responder

    Me sirvio mucho la info, gracias

    • MrX el octubre 4, 2013 a las 10:24 pm
    • Responder

    Resolviste mi problema, gracias!

    • gblumen el abril 30, 2014 a las 3:59 pm
    • Responder

    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?

    1. 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.

    • banel el octubre 22, 2014 a las 2:23 pm
    • Responder

    Hola este codigo lo tendria que poner en .htaccess?

    1. 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.

    • banel el octubre 22, 2014 a las 5:34 pm
    • Responder

    Quiero poner el de HTML como lo pondira entonces?

    1. Banel: ¿te has leído el artículo? :/

    • Oscar el febrero 13, 2017 a las 5:05 am
    • Responder

    Gracias por el aporte

    • José María García Olmo el abril 13, 2017 a las 11:11 am
    • Responder

    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.

    1. ¿Replicar las secuencias de código? ¿qué secuencias? No entiendo…

    • Rafael el abril 28, 2017 a las 7:44 pm
    • Responder

    Hola, lo he implementado en ASP.NET C# pero no me funciona.

    ¿Que debo de agregar? Siempre me almacena imágenes en cache

    1. 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.

    • Salvatore Vella el enero 14, 2018 a las 7:15 pm
    • Responder

    Estoy desarrollando una app y me gustaría integran un boton para borrar la cache del movil ¿Como haría eso?

    • Jose el enero 18, 2018 a las 9:36 pm
    • Responder

    Gracias hermano, por tu ayuda

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

¿Eres humano? Si lo eres, resuelve esta operación: *Límite de tiempo excedido. Por favor complete el captcha otra vez más.