Refrescar imagen

Elaboré un CGI en PERL, en el cual un usuario ingresa su código y se le muestra un gráfico de barras indicando su consumo en un determinado periodo de tiempo. Para esto en el script PERL genero un gráfico de formato PNG, el cual archivo en un directorio; luego construyo (en el mismo script PERL) el código HTML y en una parte de este pongo una etiqueta <scr ...> llamando al gráfico.
EL problema surge cuando pruebo con dos usuarios diferentes: Ingreso el código del primero, ejecuto el CGI y todo sale bien, para el segundo hago lo mismo, ingreso su código, ejecuto el CGI, y aquí surge el problema: me muestra el gráfico que corresponde al primero. El gráfico para el segundo usuario es generado normalmente, lo que pasa es que el explorador al invocar a una página que ya mostró antes no refresca o recarga los gráficos desde el sitio donde se encuentran. Necesito saber con urgencia como recargar las imágenes sin importar si el explorador ya mostró la página. Espero me haya dejado entender.
Gracias.
Nota: ya probé con '<meta http="Cache-Control" content="no-cache">': NO FUNCIONA
También probé con <body onLoad="location.reload()">: a cada rato me sale la ventana de "La página no puede actualizarse sin reenviar la información...": FUNCIONA pero como hago para que no aparezca este mensaje a cada rato, además esto no es para nada óptimo.

1 respuesta

Respuesta
1
No estás utilizando un <meta> correcto para evitar el cacheado... Usa este:
<meta HTTP-EQUIV="Pragma" CONTENT="no-cache">
O bien este otro:
<meta HTTP-EQUIV="Expires" CONTENT="0">
Comprueba, así mismo, que tu servidor web no esté cacheando las peticiones de una misma página, o que no existan caches intermedios en tu plataforma de pruebas (como Squid u otros; una buena pista sería mirar en la máquina en la que estés probando y en el firewall/gateway de la red local). Los cachés intermedios IGNORAN las instrucciones <meta>.
Por otro lado, puedes llamar a location. Reload() con un parámetro booleano. Si le pasas true, ignorará cualquier posible copia en la caché local: location. Reload(true).
Otra posible solución es hacer que tu script Perl cree una cadena de texto al azar y la use para cambiar (de forma predecible) los nombres de los gráficos generados, así como la URL de respuesta. La cadena de texto actuaría como un identificador de la sesión, y si se añadiese al nombre del gráfico (así: graficoABCD.png) lo haría único para cada sesión. Naturalmente, tendrías que cuidarte de asignarlo correctamente en el SRC del IMG de la página de respuesta que generas (que ahora sería distinta en cada ejecución del script). Puedes generar esta cadena en cliente, si lo deseas, y pasarla mediante GET al script Perl... Desarrollando esto te asegurarías que, para cada sesión, se ofrece una página distinta, con lo que no habría problemas con el caché. Un trabajo periódico podría borrar páginas e imágenes antiguas en el servidor.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas