2012-04-12 24 views
10

Tengo la página A. El usuario hace clic en un formulario para enviar datos y lo lleva a la página B. Cuando hace clic en el botón Atrás, necesito la página A para ser actualizado desde el servidor, en lugar de cargar desde el caché. Tengo esto: <meta http-equiv="expires" content="0"> pero parece que no funciona. También intenté establecer una variable en la página B (variable de sesión vía php) y luego buscarla en la página A y actualizar (o no) de acuerdo con su existencia. Esto parece que funciona bien. El código básico para esto es: Página A:Forzar la página para volver a cargar desde el servidor en lugar de cargar la versión en caché

<?php 
if(isset($_SESSION['reloadPage'])) { 
unset($_SESSION['reloadPage']); 
echo' 
<script> 
window.location.replace("/****/****/*****.php"); 
</script> 
'; 
} 
?> 

Y en la página B:

$_SESSION['reloadPage'] = 1; 

Con la solución PHP, simplemente sigue tratando de actualizar la página en un bucle sin fin. ¿Algo en mi lógica falta? ¿Es esta la manera correcta de hacerlo?

EDITAR Tras realizar investigaciones adicionales, cuando se dice que el navegador no caché de la página, ¿eso forzar un lado completo del servidor refrescar así? Eso es lo que necesito. Una actualización completa de la página del servidor.

+0

¿Es una versión en línea que podemos ver? –

Respuesta

5

OK Tal vez puedas probar:

<?php 
    if(!session_id()) { 
     @session_start(); 
    } 
    header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); 
    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'); 

    if(isset($_SESSION['form_submitted'])) { 
     unset($_SESSION['form_submitted']); 
     header('Location: ?' . uniqid()); 
     #header('Refresh: 0'); 
    } 
?> 

Usted tendrá que configurar $ _SESSION [ 'form_submitted'] = true en la página 2.

+0

No funciona como esperaba. Pero al pensarlo un poco más, parece que no está almacenando en caché la página ... PERO, no refresca el lado del servidor de lo que puedo decir. – mdance

+0

No funciona tampoco. Estoy algo perdido. – mdance

+0

¿Es una versión en línea que podemos ver? –

0

Tienes JavaScript debe ser ...

window.location = "/****/****/*****.php" 

creo que debe fijar su bucle.

+0

No creo que esté tratando de enviar personas a google. – AndrewR

+0

Mismos resultados. Creo que el problema está en mi lógica PHP ... – mdance

2

intento con los tres:

<meta http-equiv="cache-control" content="no-cache"> <!-- tells browser not to cache --> 
<meta http-equiv="expires" content="0"> <!-- says that the cache expires 'now' --> 
<meta http-equiv="pragma" content="no-cache"> <!-- says not to use cached stuff, if there is any --> 
0
<?php 
    session_start(); 
    if(isset($_SESSION['reloadPage'])) { 
    unset($_SESSION['reloadPage']); 
    echo' 
    <script> 
    window.location.replace("/****/****/*****.php"); 
    </script> 
    '; 
} 
?> 
+0

La sesión ya se inició en la parte superior de la página. – mdance

1
<?php 
    session_start(); 
    if(isset($_SESSION['reloadPage'])) { 
     unset($_SESSION['reloadPage']); 
      //no outputting code above header 
     header("Cache-Control: no-cache, must-revalidate"); 
     header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 
     header("Location: http://www.mypage.com/"); 
    } 
?> 
+0

Dijo demasiados redireccionamientos ... aunque creo que esta es la mejor solución hasta ahora. Parece que no está desactivando correctamente la variable reloadPage. – mdance

+0

Podría ser que el encabezado ya se haya enviado, esto sucederá si hay algún código de salida antes del encabezado, como cualquier HTML o eco/impresión, o cualquier otra cosa que se genere en el documento, el encabezado debería ser lo primero que se ha enviado. Esto generalmente da un error de "encabezado ya enviado", por lo que también podría ser la variable de sesión que no está desarmada, y que continúa en un bucle, intente juguetear un poco, o verifique la variable para un cierto valor, y configure es nulo en lugar de desarmarlo, etc. – adeneo

1

Sé que esta es la vieja pregunta y ya tengo la respuesta er (que no refresca desde el servidor). Entonces me gustaría compartir una solución usando jQuery.

$('#back-button').click(function(){ 
    setTimeout(location.reload(true), 1000); 
}); 

Explicación:
Al hacer clic en el botón de retroceso, la setTimeout se desencadenó después de 1 segundo (1000 milisegundos). Luego, la página se volverá a cargar desde el servidor ya que el parámetro dentro de reload es true.

Si coloca true dentro del reload, se volverá a cargar desde el servidor, mientras que si pone false se volverá a cargar desde el caché. Fuente w3schools.

Cuestiones relacionadas