• Publicidad

Actualización de página y botón volver

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Actualización de página y botón volver

Notapor panterozo » 2011-03-17 18:07 @796

Estimados:

Tengo un script CGI, que busca información a una página y la muestra en la propia... Ahora bien, esta información será asignada al usuario que haga la consulta, por lo que esta consulta se guardará en BD y se sumará una nueva consulta al cliente cada vez que el script busque la información a esta otra página. El problema aparece al recargar la página. Si se recarga la página el script vuelve a buscar la información a esta otra página y se le suma un nuevo registro al cliente... Claramente esto no debe ocurrir. Lo que hice, fue capturar la tecla F5 y volverlo a la página anterior cuando esto sucediera. También debiese bloquear el botón del browser que permite recargar, pero creo que esta no es la mejor forma de hacerlo, quiero decir, QUE NO VAYA NUEVAMENTE A BUSCAR LA INFO Y NO SE LE SUME AL CLIENTE POR ESTA CONSULTA (ya que solo recarga la página).

Por otra parte, tengo unas consultas a la BD y algunas otras inserciones. El problema aparece una vez que se han hecho las consultas e inserciones. Si se pulsa el botón para ir atrás, el sistema vuelve a hacer las consultas e inserciones y todo lo que esté en el script anterior. Esto puede ocasionar problemas más adelante.

¿Alguna idea para estos casos, de cómo controlar los datos que son enviados y guardados? ¿Puede ser que el problema pueda resolverse de otra manera para evitar estos problemas?


¡¡¡Saludos!!!
panterozo
Perlero nuevo
Perlero nuevo
 
Mensajes: 160
Registrado: 2010-01-26 08:36 @400

Publicidad

Re: Actualización de página y botón volver

Notapor explorer » 2011-03-17 18:40 @819

En temas de Internet, y sobre todo, web, hay que pensar que el usuario puede realizar cualquier paso en cualquier momento, y por un montón de razones (imagínate que se le va la electricidad de casa justo en ese momento y tiene que volver a entrar).

Para evitar que sea el usuario y el navegador web el que guarden el estado del proceso, lo que se debe hacer es guardar el estado del proceso en el lado del servidor. Al usuario solo le entregaremos una galleta (cookie) que lo identifique en nuestro sistema.

De esa manera, nosotros tenemos toda la información del proceso, toda la información del usuario, todas las condiciones de búsqueda... y nos importa poco si el usuario va hacia adelante o hacia atrás: las reglas del proceso también son nuestras, por lo que no podrá seguir adelante si no cumple con todas las condiciones. Y si va hacia atrás, será porque se le ha olvidado algo, hubo un corte de cobertura en su teléfono móvil o el gato pulsó la tecla de retroceso en el teclado multimedia del usuario (a veces pasa si no le dejamos jugar con el ratón).

Y otro detalle de diseño: en cualquier proceso en que el usuario realiza cualquier proceso "peligroso", se debe tener en cuenta la regresión de esa operación (deshacer el registro o la operación peligrosa).

No puedes evitar el caso de que un usuario recargue la página: va a suceder. Y no importa que inhabilites la tecla F5: el usuario es lo suficientemente inteligente como para descubrir otra manera de recargar la página (y sin intervención gatuna). Incluso capturando eventos del teclado o escondiendo la botonera, no importa: lo va a conseguir.

Debes prever esas circunstancias, y tomar una decisión. Si el usuario decide recargar la consulta y solo tiene derecho a verla una vez, pues le sueltas una página de error, y listo.

Sí que hay una manera de controlar el vuelta a atrás: antes de hacer la consulta y las inserciones, puedes saber de dónde viene el usuario, mirando el campo REFERER de las variables de entorno del CGI. Allí estará indicada la URL de la página de donde viene el usuario. Si no es la página normal, entonces te niegas a hacer la consulta y las inserciones. Pero esto tampoco está garantizado (el navegador web puede usar su caché para presentar la página anterior, y hacerte creer que todo va bien). Por eso, una forma de resolverlo es guardando el estado del usuario: si sabes que el usuario acaba de realizar una operación de inserción, entonces no le dejas hacer más, por mucho que el usuario vuelva hacia atrás. Tu le respondes con la página de error y le ofreces que siga con el proceso.

La idea es que el usuario debe seguir nuestras reglas, por mucha libertad que le dé el navegador. Y nosotros sabemos qué es lo que ha hecho y lo que debemos presentarle y lo que debe respondernos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Actualización de página y botón volver

Notapor panterozo » 2011-03-18 12:38 @568

Explorer... ¡¡¡Te pasaste!!! ;)

¡Qué buena respuesta! :D ... Ahora está claro lo que debo hacer.

¡¡¡Saludos y gracias, camarada!!!
panterozo
Perlero nuevo
Perlero nuevo
 
Mensajes: 160
Registrado: 2010-01-26 08:36 @400


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 27 invitados