Nous rencontrons chaque jour d'innombrables formulaires sur Internet, et nous constatons également que la plupart d'entre eux n'empêchent pas les utilisateurs de soumettre le même formulaire plusieurs fois. L’absence de telles restrictions peut parfois produire des résultats inattendus, comme des abonnements répétés à des services de courrier électronique ou des votes répétés. Peut-être que certains débutants ASP ne savent pas comment limiter la soumission répétée du même formulaire dans les applications ASP. Je vais donc vous présenter ici une méthode simple pour empêcher les utilisateurs de soumettre le même formulaire plusieurs fois au cours de la session en cours dans les applications ASP.
Ce travail est principalement composé de quatre sous-programmes. Dans les applications plus simples, il suffit de mettre ces codes dans les fichiers inclus pour référence directe ; pour les environnements plus complexes, nous donnons quelques suggestions d'amélioration à la fin de l'article.
1. Processus de travail de base
Ci-dessous, nous discutons tour à tour de ces quatre sous-programmes.
(1) Initialisation
Ici, nous devons sauvegarder deux variables dans l'objet Session, parmi lesquelles :
⑴ Chaque formulaire correspond à un identifiant unique appelé FID, et un compteur est utilisé pour rendre cette valeur unique.
⑵ Chaque fois qu'un formulaire est soumis avec succès, son FID doit être stocké dans un objet Dictionnaire.
Nous utilisons un processus dédié pour initialiser les données ci-dessus. Bien qu'il soit appelé par chaque sous-programme à l'avenir, il n'est en réalité exécuté qu'une seule fois au cours de chaque session :
Sub InitializeFID()
Si ce n'est pas IsObject(Session("FIDList")) Alors
Définir Session("FIDList")=Server.CreateObject("Scripting.Dictionary")
Session("FID")=0
Fin si
End Sub
(2) Générer l'identifiant unique du formulaire
La fonction suivante GenerateFID() est utilisée pour générer l'identifiant unique du formulaire. Cette fonction incrémente d'abord la valeur FID de 1 puis la renvoie :
Fonction GenerateFID()
InitialiserFID
Session("FID") = Session("FID") + 1
GénérerFID = Session("FID")
Fonction de fin
(3) Enregistrez le formulaire soumis.
Lorsque le formulaire est soumis avec succès, enregistrez son identifiant unique dans l'objet Dictionnaire :
Sub RegisterFID().
Dim strFID
InitialiserFID
strFID = Requête("FID")
Session("FIDlist").Ajouter strFID, maintenant()
End Sub
(4) Vérifiez si le formulaire est soumis à plusieurs reprises
Avant de traiter formellement le formulaire soumis par l'utilisateur, vous devez vérifier si son FID a été enregistré dans l'objet Dictionnaire. La fonction CheckFID() suivante est utilisée pour terminer ce travail. Si elle a été enregistrée, elle renvoie FALSE, sinon elle renvoie TRUE :
Fonction CheckFID().
Dim strFID
InitialiserFID
strFID = Requête("FID")
CheckFID = pas Session("FIDlist").Exists(strFID)
Fonction de fin
2. Comment l'utiliser
Il existe deux endroits où la fonction ci-dessus est utilisée, à savoir lorsque le formulaire est généré et lorsque les résultats sont traités. Supposons que les quatre sous-programmes ci-dessus ont été placés dans le fichier Forms.inc inclus. Le code suivant détermine s'il faut générer un formulaire ou traiter les résultats du formulaire en fonction de la valeur FID. Le processus de traitement qu'il décrit convient à la plupart des applications ASP :
< %Option explicite%>
< !--#include file="forms.inc"-->
<HTML>
<TÊTE>
<TITRE>Test de soumission de formulaire</TITRE>
</TÊTE
<CORPS>
< %
Si Request("FID") = "" Alors
Générer un formulaire
Autre
ProcessusFormulaire
Fin si
%>
</CORPS>
< /HTML>
GenerateForm est responsable de la génération du formulaire, qui doit contenir un FID masqué, tel que :
< %
Sous-GénérerForm()
%>
< form action="< %=Request.ServerVariables("PATH_INFO")%>" méthode=GET>
< type d'entrée=nom caché=valeur FID="< %=GenerateFID()%>">
<type d'entrée=nom du texte="param1" valeur="">
<type d'entrée=valeur de soumission="OK">
</formulaire>
< %
Fin du sous-marin
%>
ProcessForm est responsable du traitement du contenu soumis via le formulaire, mais avant le traitement, CheckFID() doit être appelé pour vérifier si le formulaire actuel a été soumis. Le code est le suivant :
< %.
Sous-ProcessForm()
Si CheckFID() Alors
Response.Write "Ce que vous avez entré est" & Request.QueryString("param1")
S'inscrireFID
Autre
Réponse.Écrivez « Ce formulaire ne peut être soumis qu'une seule fois ! »
Fin si
Fin du sous-marin
%>
3. Limites et mesures d'amélioration
Ci-dessus, nous avons introduit une méthode pour limiter la soumission du même formulaire plusieurs fois au cours de la session en cours. Dans les applications pratiques, des améliorations peuvent devoir être apportées sur de nombreux aspects, par exemple :
⑴ Vérifiez la légalité des données saisies par l'utilisateur avant d'enregistrer l'ID du formulaire, de sorte que lorsque les données sont illégales, l'utilisateur puisse appuyer sur la touche "Retour". bouton pour revenir et soumettre à nouveau le même formulaire après correction.
⑵ Cette restriction sur la soumission du formulaire n'est valable que pour la durée de la session en cours au maximum. Si cette restriction est nécessaire pour s'étendre sur plusieurs sessions, Cookeis ou une base de données sera utilisée pour enregistrer les données pertinentes.