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

por | abril 13, 2010

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 pensamientos en “Evitar la cache en programación ASP, PHP, Javascript, HTML y en formularios

  1. gblumen

    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. Sócrates 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.

    1. Sócrates 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.

  2. José María García Olmo

    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. Sócrates Autor

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

  3. Rafael

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

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

    1. Sócrates 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.

  4. Salvatore Vella

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

¿Eres humano? Si lo eres, resuelve esta operación: *