Cet article présente une méthode simple dans les applications ASP pour empêcher les utilisateurs de soumettre le même formulaire plusieurs fois au cours de la session en cours. Il est principalement composé de quatre sous-programmes. Dans les applications plus simples, il suffit de mettre ces codes dans les fichiers inclus et de les référencer directement ; pour les environnements plus complexes, nous donnons quelques suggestions d'amélioration en fin d'article.
1. Processus de travail de base
Ci-dessous, nous discutons tour à tour de ces quatre sous-programmes.
(1) Initialisation
Ici, nous devons enregistrer deux variables dans l'objet Session, parmi lesquelles :
⑴ Chaque formulaire correspond à un identifiant unique appelé FID, et un compteur permet de rendre la 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 par session :
SubInitializeFID()
Si ce n'est pas IsObject (Session (FIDList)) Alors
Définir la session (FIDList) = Server.CreateObject (Scripting.Dictionary)
Session(FID)=0
Fin si
Fin du sous-marin
(2) Générer un identifiant unique pour le formulaire
La fonction suivante GenerateFID() est utilisée pour générer un identifiant unique pour le formulaire. La fonction incrémente d'abord la valeur FID de 1, puis la renvoie :
FonctionGenerateFID()
InitialiserFID
Session(FID) = Session(FID) + 1
GénérerFID = Session (FID)
Fonction de fin
(3) Formulaire d'inscription soumis
Lorsque le formulaire est soumis avec succès, son identifiant unique est enregistré dans l'objet Dictionnaire :
Sous-registreFID()
Dim strFID
InitialiserFID
strFID = Demande (FID)
Session (FIDlist).Ajouter strFID, maintenant()
Fin du sous-marin
(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 = Demande (FID)
CheckFID = pas Session(FIDlist).Exists(strFID)
Fonction de fin
2. Comment 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 Requête (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=valeur param1=>
<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, vous devez appeler CheckFID() 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
Response.Write Ce formulaire ne peut être soumis qu'une seule fois !
Fin si
Fin du sous-marin
%>
3. Restrictions et mesures d'amélioration
Ci-dessus, nous avons introduit un moyen de limiter la soumission du même formulaire plusieurs fois au cours de la session en cours. Dans les applications pratiques, des améliorations peuvent être nécessaires sur de nombreux aspects, tels que :
⑴ 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 le bouton Retour 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.
⑶ Cette méthode n'est pas sûre. Il est uniquement utilisé pour éviter toute utilisation abusive et n’empêche pas les utilisateurs expérimentés de soumettre intentionnellement le même formulaire plusieurs fois.