2011-01-07 23 views
9

He intentado cada combinación y permutación de metaetiquetas que se supone que impiden que una página se almacene en caché, ¡pero Firefox STILL almacena en caché la página! Solo necesito que la URL se vuelva a cargar cuando un usuario presiona el botón Atrás. Funciona bien en IE8.¿Cómo realizo la página de recarga de Firefox cuando se presiona el botón Atrás?

He intentado todos estos ...

<meta http-equiv="Cache-Control" content="no-store" /> 
<meta http-equiv="Pragma" content="no-cache"/> 
<meta http-equiv="Expires" content="-1"/> 
<meta http-equiv="Expires" content="Sat, 1 Jan 2000 00:00:00 GMT" /> 

... y también he probado el siguiente JavaScript ...

<input type="hidden" id="refreshed" value="no"/> 
<script type="text/javascript"> 

    onload=function(){ 
     var e=document.getElementById("refreshed"); 
     if(e.value=="no"){ 
      e.value="yes"; 
     } 

     else{ 
      e.value="no"; 
      location.reload(); 
     } 

    } 

</script> 

... todo en vano. ¿Que me estoy perdiendo aqui? Las páginas se generan con PHP si eso importa.

ACTUALIZACIÓN 1:

he intentado todas las sugerencias hasta ahora, pero todavía no puede conseguir que esto funcione. Cuando utilizo el código PHP de Chris lo uso como esto ...

<?php 
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml"> 
<!--the rest of my page--> 

.. y como se puede ver es en la parte superior extrema de mi página web, antes de la cabecera DOCTYPE.

También he experimentado con session_start() pero incluso después de leer el manual no estoy seguro de que lo esté usando bien. Lo estaba poniendo justo en la parte superior de mi página también.

Estoy abierto a CUALQUIER SUGERENCIA que lo haga funcionar sin romper la funcionalidad de otra página. Sé que he visto páginas que se vuelven a cargar CADA VEZ que se usa el botón Atrás, ¿CÓMO LO HACEN ?!

¡Solucionado!

Resulta que tenía problemas múltiples que trabajan en mi contra, pero a través de la diligencia debida pude eliminar esos problemas y salir victorioso.

Después de que Chris actualizó su código para ...

<?php 
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 
echo time(); 
?><a href="http://google.com">aaaaaaaaaaaaa</a> 

encontré que su código funcionaba efectivamente cuando se utiliza exactamente cómo tuvo que sin nada más, pero cuando lo puse en mis páginas se no funcionó Todas mis páginas son .php o .html y todas están adjuntas a DWT (Plantilla Web Dinámica), así que las estaba actualizando todas a la vez con el código de Chris. Lo que no me di cuenta fue que el DWT comienza justo después del encabezado DOCTYPE, por lo que el código nunca se insertó en mis páginas. No pude encontrar la forma de hacer que el DWT incluyera el encabezado DOCTYPE, así que entré en todas mis páginas e inserté manualmente el código sobre el encabezado DOCTYPE.

siguiente me encontré con que a pesar de que mi servidor está configurado para analizar .htm y .html como .php los .html páginas se genera un error en la parte donde había insertado el código de Chris diciendo algo en el sentido de "no puede modificar las cabeceras, encabezados tienen ya ha sido enviado ". Realmente no me importaban mis extensiones, así que cambié todas mis extensiones .html a extensiones .php.

Una pequeña molestia final fue que, aunque la página no estaba siendo almacenada en la memoria caché (como yo quería) Firefox colocaba al usuario en su última ubicación en la página anterior cuando usaba el botón Atrás (es decir, si un usuario en la parte inferior de la página a cuando navegaban hacia la página b, el usuario usaba el botón Atrás en la página b para volver a la parte inferior de la página a, no a la parte superior de la página como lo deseaba). El recorte por mi JavaScript original de esta fijado ...

<script type="text/javascript"> 

     onload=function(){ 
      document.getElementById('content').scrollTop=0; 
     } 

    </script> 

A pesar de que esto parece muy complicado para un simple problema de este tipo me alegro de que es fijo. Gracias por su ayuda, todos (especialmente Chris).

+0

¿No debería leer ? – Adam

+0

@ Adam. No lo creo, pero lo intenté en ambos sentidos para asegurarme ... de que no hubo suerte. – ubiquibacon

Respuesta

9

Esto funciona para mí

hacer una nuevo archivo php. Puedo usar la parte trasera y botones de avance y el número de la página siempre actualiza

<?php 
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 
echo time(); 
?><a href="http://google.com">aaaaaaaaaaaaa</a> 
+0

@ chris Me cansé de una variación de esto (sugerido aquí: http://stackoverflow.com/questions/3645609/reload-the-page-on-hitting-back-button) ... Tu es un poco diferente así que lo haré pruébalo también – ubiquibacon

+0

@chris ¿es posible que esté poniendo esto en el lugar equivocado? Lo probé en la etiqueta '', justo después de la etiqueta '', justo antes de la etiqueta ', y en la parte superior de la página, antes del' DOC TYPE', ninguna de las cuales funcionó. – ubiquibacon

+0

Debe ponerlo antes de TODO, incluido cualquier espacio en blanco (espacios, líneas nuevas, etc.) @typo. – Hello71

0

Echa un vistazo a los encabezados http en vivo, verá cuando presiona el botón Atrás, no se realiza ninguna solicitud. Que se hace a propósito, para que no pierda lo que puede haber escrito en formularios.

Editar

Algunos mensaje el intercambio de los expertos dijo que esto funcionó, pero su desde 2006.

<META HTTP-EQUIV="Expires" CONTENT="0"> 
<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"> 
<META HTTP-EQUIV="Cache-Control" CONTENT="no-store"> 

Entonces un javascript refrescar

+0

Sé que he usado Firefox en los sitios donde presioné el botón Atrás y la página se vuelve a cargar. Necesito que esto funcione para ayudar a idiotas a probar mi aplicación para los usuarios, por lo que no quiero que necesiten instalar un complemento. – ubiquibacon

0
<meta http-equiv="Cache-Control" content="no-cache" /> 

creo que el valor correcto es "no-cache"

+0

gracias, pero obviamente no leyó mi pregunta. – ubiquibacon

0
session_cache_limiter('nocache'); 

que debe generar automáticamente todo el los encabezados requeridos Tenga en cuenta que algunos navegadores, como Opera, aún los ignoran al usar el botón Atrás.

EDITAR

Las cabeceras relevantes son los siguientes, en caso de que quiera generarlos alguna otra manera:

Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
+1

Puede enviar un encabezado http utilizando la función de encabezado(), en lugar de usar una función relacionada con la sesión que solo funciona si usa sesiones. – goat

+0

@chris Haha, gracias, lo olvidé. Editado – kijin

+0

esto es bastante similar a lo que publicó Chris, y no puedo hacer que ninguna de tus sugerencias funcione. – ubiquibacon

0

¿Por qué? Quiero decir, ¿por qué quieres hacer esto? Cuando presiono el botón Atrás, quiero la función estándar que proporciona el navegador para volver a la página anterior. No quiero una sorpresa.

Si se trata de detener el reenvío accidental de un POST, esto se puede lograr fácilmente finalizando el manejo de POST con un redireccionamiento para mostrar la respuesta deseada usando un GET. Más adelante en esta página, se volverá a mostrar el GET redirigido (o volver a cargarlo desde la memoria caché, que debe tener el mismo resultado). Esto es lo que el usuario espera y es inofensivo.

Esto tiene la ventaja adicional de que si su salvación ha fallado al actualizar la base de datos, la pantalla mostrará lo que está en la base de datos, no lo que se ha dejado en las variables.

+2

Se debe a que una vez que se envió el formulario, SI el usuario presiona el botón Atrás, la información que está viendo será inexacta. – ubiquibacon

0

Se publicó un comentario:

Es porque una vez que el formulario ha sido presentado , si el usuario pulsa el botón espalda, la información que están visualización será inexacta.

¡Si quiere evitar esto, lo está haciendo mal! :)

Lo que debe hacer es redirigir cuando se envía el formulario.

<?php 
    // code that handles the form submit 
    header("Location: http://www.example.com/form-success.html"); // needs the absolute url (You can use $_SERVER['HTTP_HOST'], $_SERVER['PHP_SELF'] and dirname() for this) 
    exit; // prevents further execution of the php code when while doing to redirect 
?> 
+1

Ya estoy haciendo mi redireccionamiento de la manera que sugieres, el problema es que DESPUÉS de que la redirección haya sucedido SI un usuario presiona el botón Atrás, vuelve a la página anterior EXACTAMENTE como estaba, y NO se está recargando. Necesito que sea RELOADED. – ubiquibacon

3

Puede agregar el siguiente código PHP en su página de PHP.

CodeIgniter Framework version: 
$this->output->set_header('Last-Modified:'.gmdate('D, d M Y H:i:s').'GMT'); 
$this->output->set_header('Cache-Control: no-store, no-cache, must-revalidate'); 
$this->output->set_header('Cache-Control: post-check=0, pre-check=0',false); 
$this->output->set_header('Pragma: no-cache'); 

versión de PHP:

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

Y también es posible añadir siguiente código Java Script en Login/página maestra en <head> Sección:

<script language="javascript" type="text/javascript"> 
    window.history.forward(); 
</script> 

Compatibilidad verificado en

  • Internet Explorer
  • Google Chrome
  • Mozilla Firefox
  • Opera
Cuestiones relacionadas