2010-01-27 43 views
18

Mi problema es que el botón Atrás hace que el navegador diga algo así como "Página caducada" cuando la página anterior fue creada por un formulario.

Ejemplo:

  • page1: formulario enviado con la búsqueda Características (petición $ _POST, forma puntos a página 2)
  • page2: recibe $ _POST petición y Mostrar resultado (lista de usuario con enlaces , puntos a página 3)
  • page3: Mostrar perfil de usuario

Ahora cuando la v isitor hace clic en el botón Atrás en el navegador, mostrará algo así como "Página caducada".

En lugar de la página anterior se debe mostrar sin advertencias (página 2, con la lista de usuarios)

¿Cómo son sus estrategias para conseguir este comportamiento?

+2

¡Guau! Acabo de aprender algo nuevo: el operador de etiquetas 'no'. xD –

Respuesta

23

Si va a enviar un para con los parámetros de búsqueda, que están tratando de llegar algunos datos, no modificar algunos.

Por lo tanto, debe usar el método HTTP GET, y no POST: se debe utilizar POST cuando se tiene la intención de crear/modificar datos, y se debe usar GET cuando se intenta obtener algunos datos.


O, si tiene alguna operación de creación que se tiene que hacer/modificar:

  • El formulario se POST a una primera página
    • Esa página hace algunas operaciones (como la escritura algo a una base de datos)
    • Y luego redirige a otra página, usando un Location encabezado HTTP.
  • Es esa última página, es decir, las consultas realizadas por el navegador usando una solicitud GET, que muestra los datos obtenidos de los parámetros recibidos en la URL.

Ver la página Post/Redirect/Get en la wikipedia, acerca de esto.

+0

Además, si usa GET, la página de resultados es –

+1

como favorito. Excelente respuesta. No podría ser más claro y al grano. También dando más de lo solicitado; alternativas y más conocimiento. Gracias. – Cudos

+0

@Cudos: de nada :-) Diviértete! –

1

Envíe un encabezado Location en la secuencia de comandos que ha iniciado sesión, apuntando a la página que viene después.

+0

Utilice el código de estado HTTP 303 para esto. PHP tiene un valor predeterminado de 302 si no se especifica explícitamente según la documentación actual. – MattBianco

1

No utilice POST para la búsqueda. La búsqueda se puede hacer de manera segura con GET ya que no modificará nada.

1

Esto se aplica a PHP e IE8.

No solo debe configurar la caché en privado, sino que debe eliminar los 4 encabezados de caché y esto solo se puede hacer con PHP 5.3. En PHP 5.2 solo puede configurar los 4 encabezados en valores en blanco si usa el método setHeader() de Zend Framework. Por alguna razón, no es suficiente en IE8 para establecer los 4 valores de encabezado en valores vacíos. Aquí está el código para PHP 5.3:

header_remove("Expires"); 
    header_remove("Cache-Control"); 
    header_remove("Pragma"); 
    header_remove("Last-Modified"); 
0

Puede usar la sesión para hacer esto.

por ejemplo.

$ _SESSION ['name'] = $ _POST ['name'];

Recuerda desarmar tus variables después de completar el proceso para optimizar el uso de la memoria.

Cuestiones relacionadas