Foros del Web » Programando para Internet » PHP »

Probelma con el reenvio de formulario

Estas en el tema de Probelma con el reenvio de formulario en el foro de PHP en Foros del Web. Estoy haciendo una pagina web con html, php y mysql, tengo un apartado en la página en el que el usuario mete su login y ...
  #1 (permalink)  
Antiguo 04/03/2004, 08:35
OVM
 
Fecha de Ingreso: diciembre-2003
Mensajes: 31
Antigüedad: 14 años
Puntos: 0
Probelma con el reenvio de formulario

Estoy haciendo una pagina web con html, php y mysql, tengo un apartado en la página en el que el usuario mete su login y contraseña para iniciar sesion. El problema me surge cuando el usuario da a la opcion desconectar; cuando selecciona esta opción, las variables de sesión y la sesión en si se borran;una vez finalizada la sesión si el usuario le da al botón ATRAS del navegador repetidas veces, llegara a la página donde se comprobaba el login y contraseña, y el navegador informa que la página ha caducado y dando la opción de actualizar, al actualizarla el navegador reenvia el login y contraseña y el usuario vuelve a iniciar sesión.
Esto es un problema muy importante, ya que si un usario se desconecta y no cierra el navegador, otra persona puede iniciar la sesión de este dando al botón atras del navegador
Necesito que alguien me diga como puedo resolver este problema gracias
  #2 (permalink)  
Antiguo 04/03/2004, 08:48
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Prueba esto ...

Probastes ya el script Autentificator de nuestro querido moderador Cluster ?? Está muy bueno. En el me basé para realizar uno semejante y la verdad está soplao. Lo puedes hallar en http://jpinedo.webcindario.com

Salu2
__________________
Ing. Reynier Pérez Mira
  #3 (permalink)  
Antiguo 04/03/2004, 08:49
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
yo tambien me pregunto lo mismo, hasta ahora sólo he usado un poco de javascript para cerrar la ventana (y cierro la sesion con php), cuando el usuario elige desconectarse.
__________________
Dedicado a proyectos web, actualmente desarrollando un sistema de diseño de flyers online muy fácil de usar.
  #4 (permalink)  
Antiguo 04/03/2004, 09:15
 
Fecha de Ingreso: diciembre-2003
Mensajes: 54
Antigüedad: 14 años
Puntos: 0
Hola, no he probado el script que se comenta arriba, pero se me ocurre que una solución puede ser incluir un campo de verificación en el formulario de login. El contenido del campo puede ser:

Una fecha, para darle un margen de tiempo y verificar que no ha vencido

Un contador (o algo similar), que registre el numero de login y si es menor al actual denegar el acceso. Para esto tambien necesitas poner un campo en la bdd con que chequearlo.

Hay algunas otras cosas para hacer más seguro el login, pero para el problema que comentas al final terminan dependiendo de lo anterior

El campo tendria que estar encriptado para que si es modificado no permita el acceso.

Saludos
  #5 (permalink)  
Antiguo 04/03/2004, 09:24
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Bueno, la solucion puede ser hacer que la pagina receptora del formulario.

Imagino que la pagina la tienes tal como

valido usuario/pass
activo sesion
muestro el resto de la pagina

La "mejor" forma seria

valido usuario/pass
activo sesion
redirigo (header) a la pagina final

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 04/03/2004, 09:34
OVM
 
Fecha de Ingreso: diciembre-2003
Mensajes: 31
Antigüedad: 14 años
Puntos: 0
pero el problema que tengo es ke es el mismo navegador el que me reenvia el login y la contraseña a la pagina que los comprueba. Como hago para que no me los reenvieeeeeeeee
  #7 (permalink)  
Antiguo 04/03/2004, 09:54
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
¿Has probado lo que te digo en el ultimo mensaje? Es como lo hace el autenticator.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #8 (permalink)  
Antiguo 04/03/2004, 10:13
OVM
 
Fecha de Ingreso: diciembre-2003
Mensajes: 31
Antigüedad: 14 años
Puntos: 0
Pero es que mi problema es: Imaginaos que que le dais en esta pagina web a salir, es decir finalizais vuestra sesión, la pagina os avisa de que habeis cerrado y todo el tema. Pues bien una vez hecho esto y estando en la misma página, le dais al boton de ATRAS del navegador varias veces recorriendo lo que habiais recorrido, hasta llegar a la pagina que comprueba login y password, OK?. Pues bien en mi pagina web, al llegar a ese momento el navegador me informa que esa pagina ha caducado, como consecuencia de las dos variables que recibe( en este caso login y password), y el navegador me da la opcion de actualizar y reenviar los datos de ese formulario(cuyos datos eran del usuario que se acababa de desconectar) si le doy a que actualice, me valida ese usuario y le abre su sesión.
Yo no quiero que me haga eso, lo que quiero saber es como detener esa pagina caducada, o evitar que sea posible actualizarla, o evitar el reenvio, o incluso eliminar el login y el password de ese ultimo usuario que supongo que el navegador lo almacenara temporalmente.
gracias
  #9 (permalink)  
Antiguo 04/03/2004, 10:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
OVM

Tu problema más bien es de expiración de la sesión y del control de esta que haces ..

Si sale el usuario de tu aplicación por tu "salir.php" donde debes MATAR la sessión (session_destroy()) .. no debería ocurrirte lo que planteas.

En todas tus páginas de tu proceso .. deberías revisar esas variables de sesión que indentifican a tu usuario como válido .. así que si "vuelvo" hacia atras .. la primera página que me dé el historial ya me validará la sessión y no podré entrar.

El tema del formulario que te pide reenviar los datos se solventa como ha explicado Josemi .. debes redireccionar al validar .. sea a si misma o a otra pàgina pero no validar a tu usuario con las variables de tu formulario (en metodo POST) y ahí seguir el proceso.

Si el SID todavía es válido .. en tu validación del login podrías regenerar el SID con session_regenerate_id() por si tienes problemas.

Revisa en tu PHP.ini el estado de:
session.gc_maxtimelife

Y juega con ese valor .. por defecto creo que está a 1440 segundos .. hay más directivas que influyen en eso.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 04/03/2004 a las 10:27
  #10 (permalink)  
Antiguo 04/03/2004, 10:29
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
OVM, lo que yo te digo es para que lo pongas en la pagina que recibe el login (la que en tu caso intentas recargar).

Prueba a hacer ese cambio que comento.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #11 (permalink)  
Antiguo 04/03/2004, 11:05
OVM
 
Fecha de Ingreso: diciembre-2003
Mensajes: 31
Antigüedad: 14 años
Puntos: 0
problema de sesiones no es, por que cuando yo le voy dando hacia atras acabo de destruir la sesion con sus variables de sesion. La pagina que me comprueba a mi el login y el pass tiene dos $_REQUEST que se los envio de la pagina principal donde tengo el formulario. Cuando le llegan estos dos valores, compruebo en la base de datos y si son correctos creo sesion y si no es correcto no creo sesion.
Esta es la configuracion de comprobar usuario en mi pagina.
Lo que yo pienso que le pasa es que el valor de esos dos $_REQUEST se tiene que quedar almacenado por algun sitio y cuando destruyo la sesión , empiezo a retroceder y llego a la pagina de comprobar el login, el navegador me dice que esa pagina necesita esos dos datos y si le doy a actualizar el me los envia, y al enviarmelos, como son correctos pues lo valida y vuelve a crear la sesion de ese mismo usuario
gracias
  #12 (permalink)  
Antiguo 04/03/2004, 11:25
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
OVM .. lo que manda es el method de tu formulario ahí se define si será GET o POST .. si usas un link para redireccionar será GET y con "$_REQUEST" lo que haces es que no discriminas si llegan por GET/POST o son cookies tus variabels (debes usar el método esperado por tu seguridad: $_GET .. $_POST .. etc).

Si dices que al dar hacia atras en tu script de validación te salta tu navegador diciendote que va a enviar la información es por qué usastes metodo POST en tu formulario .. y todo eso se solventa como ya te ha comentado Josemi varias veces.

Pon el código que usas en tu formulario y el script que valida esos datos->crea la sesión y .. (no se donde los envias o continuas) .. para indicarte donde debes redireccionar .. pero debes hacerlo. (o usar método GET en tu formulairo de login ... lo cual no es recomendable para estos casos).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #13 (permalink)  
Antiguo 04/03/2004, 11:45
OVM
 
Fecha de Ingreso: diciembre-2003
Mensajes: 31
Antigüedad: 14 años
Puntos: 0
o no me entendeis o no me entiendo ni yo mismo. yo tengo una pagina llamada LOGIN.PHP que es donde meto el login y contraseña, en esta pagina es donde esta mi formulario que lo envio por el metodo POST.
La pagina a la que envio esos datos se llama COMP_LOGIN.PHP y empieza recogiendo las dos variables anteriores, y es donde valido el usuario si es correcto y tambien es donde comienzo la sesión.
Si yo hago estos dos pasos, (meter login y comprobar) y acontinuación elimino la sesion mediante un botón o lo que sea.
Y seguidamente le doy al boton de atras de la barra del navegador, primero pasaria a la pagina inicial del sistema, le doy otra vez al botón, y me pasa a la pagin COMP_LOGIN.PHP y es aki cuando me sale el tema de la pagina ha caducado y si le doy al boton de actualizar me recarga todo todo todo
Estoy amargao yaaa
  #14 (permalink)  
Antiguo 04/03/2004, 12:04
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Sinceramente, ¿te has molestado en probar lo que te he comentado varios mensajes antes? Con ese metodo NO SE ALMACENA EL ENVIO DEL FORMULARIO, por lo que no se reenvia.

Saludos.

PD: Por lo menos, intentalo.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #15 (permalink)  
Antiguo 04/03/2004, 12:08
OVM
 
Fecha de Ingreso: diciembre-2003
Mensajes: 31
Antigüedad: 14 años
Puntos: 0
es que no he entiendo bien tu metodo.
yo compruebo el usuario, si existe abro sesion y despues?
yo lo que hago es poner un enlace para que vuelva a la pagina principal
  #16 (permalink)  
Antiguo 04/03/2004, 12:17
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
No hagas un enlace, haz una redireccion con header():
Código PHP:
header("Location: tu_pagina.php");
exit; 
Sin nada de HTML ni mensajes.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #17 (permalink)  
Antiguo 04/03/2004, 12:26
OVM
 
Fecha de Ingreso: diciembre-2003
Mensajes: 31
Antigüedad: 14 años
Puntos: 0
Ahora si, muchas gracias
pero la verdad es ke no entiendo por que con el enlace no funcionaba y con el redireccionamiento si funciona.
Es que yo lo que ponia cuando el usuario era validado era la tipica pantallita diciendo bienvenido, lo que pasa que ahora eso no lo puedo poner?
sabes alguan manera?
  #18 (permalink)  
Antiguo 04/03/2004, 12:33
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
coloca la bienvenida en la pagina a la cual es redirigido.
o coloca un pagina de bienvenida intermedia.
__________________
Dedicado a proyectos web, actualmente desarrollando un sistema de diseño de flyers online muy fácil de usar.
  #19 (permalink)  
Antiguo 04/03/2004, 12:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
No sé a qué página redireccionas . .pero podría ser una dedicada que sólo muestre ese mensaje como te propone claudiovega .. o bien usas alguna variabel de control para indicar que a esa página llega por tal sito .. ejemplo:

Código PHP:
header("Location: tu_pagina.php?codigo=ok");
exit; 
y en tu_pagina.php .. donde quieras presentar tu mensajito:

Código PHP:
if (isset($_GET['codigo'])){
echo 
"Autentificación correcta .. bienvendio";

Cita:
pero la verdad es ke no entiendo por que con el enlace no funcionaba y con el redireccionamiento si funciona.
Sucede por qué donde muestras el mensaje es en el mismo script que recibe tus variables de tu formulario .. para ese punto el navegador guarda copia de esas variables hasta que cambia de página si tu recargas esa página (donde te decia bienvennido ..) el navegador intenta enviarlas denuevo.

Al usar las cabeceras HTTP de redireccionamiento (heade("location ...") le dices al navegador que "se olvide de todo lo demas" y que cargue tal página nueva.


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 05:39.