Este artículo presenta un método simple en aplicaciones ASP para evitar que los usuarios envíen el mismo formulario varias veces durante la sesión actual. Se compone principalmente de cuatro subrutinas. En aplicaciones más simples, solo necesita colocar estos códigos en los archivos incluidos y hacer referencia a ellos directamente. Para entornos más complejos, damos algunas sugerencias de mejora al final del artículo.
1. Proceso de trabajo básico
A continuación analizamos estas cuatro subrutinas por turno.
(1) Inicialización
Aquí necesitamos guardar dos variables en el objeto Sesión, entre las cuales:
⑴ Cada formulario corresponde a un identificador único llamado FID y se utiliza un contador para que el valor sea único.
⑵ Siempre que un formulario se envía correctamente, su FID debe almacenarse en un objeto Diccionario.
Utilizamos un proceso dedicado para inicializar los datos anteriores. Aunque cada subrutina la llamará en el futuro, en realidad solo se ejecuta una vez por sesión:
SubInicializarFID()
Si no es objeto (sesión (lista FID)) entonces
Establecer sesión (FIDList) = Server.CreateObject (Scripting.Dictionary)
Sesión (FID) = 0
Terminar si
Subtítulo final
(2) Generar un identificador único para el formulario
La siguiente función GenerateFID() se utiliza para generar un identificador único para el formulario. La función primero incrementa el valor FID en 1 y luego lo devuelve:
FunciónGenerarFID()
InicializarFID
Sesión (FID) = Sesión (FID) + 1
GenerarFID = Sesión(FID)
Función final
(3) Formulario enviado de inscripción
Cuando el formulario se envía correctamente, su identificador único se registra en el objeto Diccionario:
SubRegistroFID()
strFID tenue
InicializarFID
strFID = Solicitud(FID)
Sesión(FIDlist).Agregar strFID, ahora()
Subtítulo final
(4) Compruebe si el formulario se envía repetidamente
Antes de procesar formalmente el formulario enviado por el usuario, debe verificar si su FID se ha registrado en el objeto Diccionario. La siguiente función CheckFID() se utiliza para completar este trabajo. Si se ha registrado, devuelve FALSO, de lo contrario devuelve VERDADERO:
Función VerificarFID()
strFID tenue
InicializarFID
strFID = Solicitud(FID)
CheckFID = no sesión (FIDlist). Existe (strFID)
Función final
2. Cómo utilizar
Hay dos lugares donde se utiliza la función anterior: cuando se genera el formulario y cuando se procesan los resultados. Supongamos que las cuatro subrutinas anteriores se han colocado en el archivo incluido Forms.inc. El siguiente código determina si se genera un formulario o se procesan los resultados del formulario en función del valor FID. El proceso de procesamiento que describe es adecuado para la mayoría de las aplicaciones ASP.
<%Opción Explícita%>
< !--#include archivo=formularios.inc-->
<HTML>
<CABEZA>
<TÍTULO>Prueba de envío de formulario</TÍTULO>
</CABEZA
<CUERPO>
< %
Si Solicitud (FID) = Entonces
Generar formulario
Demás
Formulario de proceso
Terminar si
%>
</CUERPO>
</HTML>
GenerateForm es responsable de generar el formulario, el cual debe contener un FID oculto, como por ejemplo:
< %
SubGenerarForm()
%>
< acción del formulario=< %=Request.ServerVariables(PATH_INFO)%> método=GET>
< tipo de entrada=nombre oculto=valor FID=< %=GenerarFID()%>>
<tipo de entrada=nombre de texto=valor de parámetro1=>
<tipo de entrada=enviar valor=Aceptar>
</formulario>
< %
Subtítulo final
%>
ProcessForm es responsable de procesar el contenido enviado a través del formulario, pero antes de procesarlo, debe llamar a CheckFID () para verificar si se ha enviado el formulario actual. El código es el siguiente:
< %
Formulario de subproceso()
Si CheckFID() Entonces
Response.Write Lo que ingresó es & Request.QueryString(param1)
RegistrarseFID
Demás
Response.Write ¡Este formulario sólo se puede enviar una vez!
Terminar si
Subtítulo final
%>
3. Restricciones y medidas de mejora
Arriba presentamos una forma de limitar el envío del mismo formulario varias veces durante la sesión actual. En aplicaciones prácticas, es posible que sea necesario realizar mejoras en muchos aspectos, como por ejemplo:
⑴ Verifique la legalidad de los datos ingresados por el usuario antes de registrar el ID del formulario, de modo que cuando los datos sean ilegales, el usuario pueda presionar el botón Atrás para regresar y enviar el mismo formulario nuevamente después de la corrección.
⑵ Esta restricción en el envío de formularios es válida solo durante la sesión actual como máximo. Si se requiere que esta restricción abarque varias sesiones, se utilizará Cookeis o una base de datos para guardar los datos relevantes.
⑶ Este método no es seguro. Sólo se utiliza para evitar el uso indebido y no impide que los usuarios expertos envíen intencionalmente el mismo formulario varias veces.