Foros del Web » Programando para Internet » PHP »

PHP y el botón "Back" del navegador.

Estas en el tema de PHP y el botón "Back" del navegador. en el foro de PHP en Foros del Web. Buenas gente, he descubierrto un problema bastante grave en una web que estoy desarrollando: No sé por qué motivo, mientras navego por ella, si clicko ...
  #1 (permalink)  
Antiguo 13/03/2006, 08:56
Avatar de renton  
Fecha de Ingreso: enero-2004
Ubicación: BCN (PPCC)
Mensajes: 573
Antigüedad: 20 años, 3 meses
Puntos: 1
PHP y el botón "Back" del navegador.

Buenas gente,
he descubierrto un problema bastante grave en una web que estoy desarrollando:

No sé por qué motivo, mientras navego por ella, si clicko en el botón "Back" del navegador, en vez de aparecerme la página anterior directamente, me aparece una pagina de "error" con el siguiente mensaje:

Cita:
Warning: Page has Expired The page you requested was created using information you submitted in a form. This page is no longer available. As a security precaution, Internet Explorer does not automatically resubmit your information for you.

To resubmit your information and view this Web page, click the Refresh button.
Aqué se puede deber esto? Y sobretodo Cómo podría solucionarlo?
Utilizo sesiones y paso los datos por post. Puede tener algo que ver?

Muchas graciasSsSs!
__________________
"No et limites a contemplar aquestes hores que ara venen, baixa al carrer i participa.
No podran res davant un poble unit, alegre i combatiu!!"
  #2 (permalink)  
Antiguo 13/03/2006, 09:18
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 18 años, 7 meses
Puntos: 19
Lo primero, decir que ese mensaje es un aviso y no un error. Lo que viene a decir es que la página a la que intentas acceder se creó con la información de un formulario y, por lo tanto, es posible que no quieras volver a enviar el formulario de nuevo. Parece que es una opción de seguridad de tu navegador (Internet Explorer) que no te permite volver a enviar la información del formulario. Espero haberte aclarado un poco el tema. Un saludo.
  #3 (permalink)  
Antiguo 13/03/2006, 09:21
Avatar de renton  
Fecha de Ingreso: enero-2004
Ubicación: BCN (PPCC)
Mensajes: 573
Antigüedad: 20 años, 3 meses
Puntos: 1
No, lo siento pero no me has aclarado nada, más que nada porque hasta ahí llego.

El tema es saber qué hay que hacer para que ese mensaje no aparezca. (no es sólo una caracteristica de IE, en Firefox aparece otro parecido)

Cheers anyway.
__________________
"No et limites a contemplar aquestes hores que ara venen, baixa al carrer i participa.
No podran res davant un poble unit, alegre i combatiu!!"
  #4 (permalink)  
Antiguo 13/03/2006, 10:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Deberías alcarar primero tu que programación usas.

Normalmente el problema que describes además que es un aviso sucede por qué usas sesiones y enviastes tus datos por método POST desde un formulario.

En ese caso .. el uso de sesiones ajusta la "caché" de las páginas que se generan a un "noche" o "private" que hace que te indique si vuelves a la página anterior por el "historial" del navegador que la página ya ha caducado. Cosa completamente normal y de esperar en un sistema basado en sesiones.

Soluciones.

TU aplicación NUNCA debería dejar el proceso de unos datos de formulario (por método POST) en una página generada. Es decir, hacer cosas como:

formulario.php
Código PHP:
// tu formulario ...
<form action="procesar.php" method="post">
etc .. 
procesar.php
Código PHP:
<? 

hacer un proceso y 
..

echo 
"algo"// mostrar un mensaje .. generar una página en este punto.
Lo que debes hacer es SIEMPRE que termines el proceso, redireccionar a otra página donde mostraras tu mensaje de error/exito o cualquier otro proceso.

proceso.php
Código PHP:
<?
// proceso PHP
header ("Location: nosedonde.php");
exit;
?>
Con eso ya evitas que el navegador almacene (mejor dicho los descarta) los datos enviados por POST al cambiar de método (GET cuando haces una redirección de ese estilo).

Otras soluciones son la de ajustar el "cacheado" de tus páginas. Si usas sesiones la función:

session_cache_limiter() lo define y ajusta .. deberías ajustarlo a un valor "public" o similar para que no te "expire" la página en esas condiciones.

Un saludo,
  #5 (permalink)  
Antiguo 13/03/2006, 10:26
Avatar de renton  
Fecha de Ingreso: enero-2004
Ubicación: BCN (PPCC)
Mensajes: 573
Antigüedad: 20 años, 3 meses
Puntos: 1
A tus pies, oh gran Cluster!!

Me has salvadoOoO!!!
__________________
"No et limites a contemplar aquestes hores que ara venen, baixa al carrer i participa.
No podran res davant un poble unit, alegre i combatiu!!"
  #6 (permalink)  
Antiguo 13/03/2006, 11:12
Avatar de renton  
Fecha de Ingreso: enero-2004
Ubicación: BCN (PPCC)
Mensajes: 573
Antigüedad: 20 años, 3 meses
Puntos: 1
Sólo una pregunta...
si tal como acabas un proceso ejecutas un "header" para redireccionar a otra página... cómo te lo montas si necesitas pasar datos de una pagina a la otra (get o post)? Metes todo en sesiones?

Graciass.
__________________
"No et limites a contemplar aquestes hores que ara venen, baixa al carrer i participa.
No podran res davant un poble unit, alegre i combatiu!!"
  #7 (permalink)  
Antiguo 13/03/2006, 11:36
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por renton
Sólo una pregunta...
si tal como acabas un proceso ejecutas un "header" para redireccionar a otra página... cómo te lo montas si necesitas pasar datos de una pagina a la otra (get o post)? Metes todo en sesiones?

Graciass.
Normalmente en un "proceso" clásico: un INSERT a una BBDD .. (o similar) .. enviar un e-mail .. validar un formulario .. etc al final lo único que gestionas son "mensajes" de error/exito .. este tipo de mensajes puedes simplemente propagarlos en el URL del redireccionamiento:

Código PHP:
<?
header
("Location: nose.php?mensaje=1")
En este caso a "nose.php" le llega por GET esos datos (en el URL).

Pero si tienes más variables o alguna es "sensible" (que no deba o pueda ser alterada por el camino) en ese caso uso sesiones:

Imagina el caso de una validación fallida de un formulario .. usando sesiones:
Código PHP:
// vuelvo el array asociado a un array (todas las variables que enviastes).
session_start(); // inicio uso sesiones ...
$_SESSION['variables']=$_POST// todo el array $_POST a una variable de sesión.
// redirecciono
header ("Location: nose.php"); 
En "nose.php" .. tomo de la sesión los valores devueltos.

Con este proceso no quiere decir que tengamos que tener vários scripts para estos procesos: formulario.php -> proceso.php -> etc ... Perfectamente puede estar todo en un mismo "script" .. eso sí hay que tener encuenta que son "procesos" individuales que se ejecutan en una "iteracción" con el servidor (una recarga de página por proceso por decirlo así ...).

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 08:18.