Foros del Web » Programando para Internet » PHP »

Evitar "Advertencia: La página ha caducado"

Estas en el tema de Evitar "Advertencia: La página ha caducado" en el foro de PHP en Foros del Web. Hola, Existe alguna manera de evitar este mensaje al pulsar el botón de "Atrás" del navegador cuando enviamos información con un formulario (como por ejemplo ...
  #1 (permalink)  
Antiguo 14/12/2005, 10:54
 
Fecha de Ingreso: marzo-2002
Mensajes: 188
Antigüedad: 15 años, 9 meses
Puntos: 0
Evitar "Advertencia: La página ha caducado"

Hola,
Existe alguna manera de evitar este mensaje al pulsar el botón de "Atrás" del navegador cuando enviamos información con un formulario (como por ejemplo un buscador, una tienda online, etc)?
Gracias y saludos,
  #2 (permalink)  
Antiguo 14/12/2005, 19:12
Avatar de Panino5001
Moderatroll
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.062
Antigüedad: 13 años, 6 meses
Puntos: 775
Esto muchas veces se evita si el método del formulario es get en vez de post.
  #3 (permalink)  
Antiguo 15/12/2005, 02:34
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Cita:
Esto muchas veces se evita si el método del formulario es get en vez de post.
Pero si los datos son demasiados (medidos en carácteres) usar GET no es opción; el tamaño de la URIs tiene límite (creo 255 carácteres). Ni se diga si los datos son de tipo "confidencial" (passwords, users, etc).

Lo que debes hacer es separar la parte de "proceso" de datos y dejarla independiente, redireccionando a la parte de "resultados".

Ahora tendrás un archivo que procesa los datos y mostrará "algo", por ejemplo:
Código PHP:
// conectas y demás
mysql_query("INSERT INTO tabla VALUES ('".$_POST['dato']."')"); // PROCESO

echo "Dato guardado"// RESULTADO 
Separando y redireccionando quedaría algo como:
Código PHP:
// conectas y demás
mysql_query("INSERT INTO tabla VALUES ('".$_POST['dato']."')"); // PROCESO

header("Location: resultado.php"); // REDIRECIONAS 
y en resultado.php
Código PHP:
echo "Dato guardado"// RESULTADO 
... un ejemplo quizá pecando de simple pero la idea es esa. Puedes "ampliarlo" enviando valores vía URI, creando diferentes archivos para diferentes "resultados" (error, confirmación, etc) ó cualquier variante (a tu imaginación). La cuestión, repito, es dejar el "proceso" independiente (sin impresiones) y redireccionar.

Saludos!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #4 (permalink)  
Antiguo 16/12/2005, 05:20
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por Panino5001
Esto muchas veces se evita si el método del formulario es get en vez de post.
Justo es al reves .. si usas POST el navegador (cliente) almacena temporalmente los datos que envias por dicho método .. al recargar la página el navegador intenta nuevamente enviar dichos datos. Con el método GET no sucede esto.

Luego están los problemas que comenta jam1138 y la solución sería la que plantea el mismo: EL objetivo es "salir" rápido del script que hace el proceso (de insercción de datos en tu BD .. etc) y no quedarte en el (por ejemplo mostrando un mensaje de error/exito).

Por otro lado .. si usas sesiones .. el uso de sesiones también gestiona el "caché" de las páginas bajo la direcctiva: session.cache_limiter (php.ini) la cual se puede ajustar con la función: session_cache_limiter() pasandola del "por defecto" .. private a "public" o equivalentes.

Un saludo,
  #5 (permalink)  
Antiguo 19/12/2005, 06:54
Avatar de Panino5001
Moderatroll
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.062
Antigüedad: 13 años, 6 meses
Puntos: 775
Cita:
Iniciado por Cluster
Justo es al reves .. si usas POST el navegador (cliente) almacena temporalmente los datos que envias por dicho método .. al recargar la página el navegador intenta nuevamente enviar dichos datos. Con el método GET no sucede esto.
Lo que dice Jam es cierto siempre. Con lo de Cluster no estoy tan de acuerdo, justamente por el ejemplo que se me vino a la mente cuando respondí:
Imaginemos que tenemos un formulario con un campo de búsqueda y que al hacer el submit muestra en la misma página los resultados de la consulta a la base de datos. Si hacemos una segunda búsqueda y luego queremos ver la anterior haciendo click al botón atrás del navegador, si usamos el método post aparecerá el mensaje 'la página ha caducado'. Si en cambio usamos get, se mostrarán los resultados de la búsqueda anterior, ya que el historial guarda las urls con el query_string incluído.
No obstante, creo que es cierto que es uno de los pocos ejemplos en que esto sería válido y que la mejor respuesta es la de jam.
Saludos.
  #6 (permalink)  
Antiguo 19/12/2005, 08:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ok .. Panino5001. Me equivoqué al leer tu respuesta. Tal vez me expresé mal en mi explicación pero en el fondo es lo que comentas: por GET lo toma del historial del navegador y por POST (no sé técnicamente como en concreto) los vuelve a re-enviar.

Un saludo,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:45.