Wir stoßen täglich auf unzählige Formulare im Internet und sehen auch, dass die meisten von ihnen den Benutzern nicht das mehrfache Absenden desselben Formulars verbieten. Das Fehlen solcher Einschränkungen kann manchmal zu unerwarteten Ergebnissen führen, beispielsweise zu wiederholten Abonnements von E-Mail-Diensten oder wiederholten Abstimmungen. Möglicherweise wissen einige ASP-Anfänger nicht, wie sie die wiederholte Übermittlung desselben Formulars in ASP-Anwendungen einschränken können. Daher stelle ich Ihnen hier eine einfache Methode vor, um zu verhindern, dass Benutzer während der aktuellen Sitzung in ASP-Anwendungen dasselbe Formular mehrmals senden.
Diese Arbeit besteht hauptsächlich aus vier Unterprogrammen. Für komplexere Umgebungen müssen Sie diese Codes nur in die mitgelieferten Dateien einfügen. Am Ende des Artikels geben wir einige Verbesserungsvorschläge.
1. Grundlegender Arbeitsprozess
Im Folgenden besprechen wir diese vier Unterprogramme der Reihe nach.
(1) Initialisierung
Hier müssen wir zwei Variablen im Session-Objekt speichern, darunter:
⑴ Jede Form entspricht einer eindeutigen Kennung namens FID, und ein Zähler wird verwendet, um diesen Wert eindeutig zu machen.
⑵ Immer wenn ein Formular erfolgreich übermittelt wird, muss seine FID in einem Dictionary-Objekt gespeichert werden.
Wir verwenden einen speziellen Prozess, um die oben genannten Daten zu initialisieren. Obwohl es in Zukunft von jedem Unterprogramm aufgerufen wird, wird es tatsächlich nur einmal pro Sitzung ausgeführt:
Sub InitializeFID()
Wenn nicht IsObject(Session("FIDList")) Dann
Set Session("FIDList")=Server.CreateObject("Scripting.Dictionary")
Sitzung("FID")=0
Ende wenn
End Sub
(2) Generieren Sie die eindeutige Kennung des Formulars.
Die folgende Funktion GenerateFID() wird verwendet, um die eindeutige Kennung des Formulars zu generieren. Diese Funktion erhöht zunächst den FID-Wert um 1 und gibt ihn dann zurück:
Funktion GenerateFID()
FID initialisieren
Sitzung("FID") = Sitzung("FID") + 1
GenerateFID = Session("FID")
Endfunktion
(3) Registrieren Sie das gesendete Formular.
Wenn das Formular erfolgreich gesendet wurde, registrieren Sie seine eindeutige Kennung im Dictionary-Objekt:
Sub RegisterFID().
StrFID dimmen
FID initialisieren
strFID = Request("FID")
Session("FIDlist").StrFID hinzufügen, now()
End Sub
(4) Überprüfen Sie, ob das Formular wiederholt gesendet wird.
Bevor Sie das vom Benutzer gesendete Formular offiziell verarbeiten, sollten Sie prüfen, ob seine FID im Dictionary-Objekt registriert wurde. Die folgende CheckFID()-Funktion wird verwendet, um diese Arbeit abzuschließen. Wenn sie registriert wurde, gibt sie FALSE zurück, andernfalls gibt sie TRUE zurück:
Funktion CheckFID().
StrFID dimmen
FID initialisieren
strFID = Request("FID")
CheckFID = not Session("FIDlist").Exists(strFID)
Endfunktion
2. Verwendung
Die obige Funktion wird an zwei Stellen verwendet, nämlich beim Generieren des Formulars und beim Verarbeiten der Ergebnisse. Gehen Sie davon aus, dass die oben genannten vier Unterroutinen in der enthaltenen Datei Forms.inc platziert wurden. Der folgende Code bestimmt, ob ein Formular generiert oder die Formularergebnisse basierend auf dem FID-Wert verarbeitet werden sollen. Der darin beschriebene Verarbeitungsprozess ist für die meisten ASP-Anwendungen geeignet:
< %Option Explicit%>
< !--#include file="forms.inc"-->
<HTML>
<KOPF>
<TITLE>Formulareinreichungstest</TITLE>
</KOPF
<KÖRPER>
< %
Wenn Request("FID") = "" Dann
GenerateForm
Anders
ProzessForm
Ende wenn
%>
</KÖRPER>
< /HTML>
GenerateForm ist für die Generierung des Formulars verantwortlich, das eine versteckte FID enthalten sollte, wie zum Beispiel:
< %
SubGenerateForm()
%>
< form action="< %=Request.ServerVariables("PATH_INFO")%>" method=GET>
< Eingabetyp=versteckter Name=FID-Wert="< %=GenerateFID()%>">
<Eingabetyp=Textname="param1" wert="">
<Eingabetyp=Wert senden="OK">
</form>
< %
Sub beenden
%>
ProcessForm ist für die Verarbeitung des über das Formular übermittelten Inhalts verantwortlich. Vor der Verarbeitung sollte jedoch CheckFID () aufgerufen werden, um zu überprüfen, ob das aktuelle Formular übermittelt wurde. Der Code lautet wie folgt:
< %
SubProcessForm()
Wenn CheckFID() Dann
Response.Write „Was Sie eingegeben haben ist“ & Request.QueryString(“param1“)
RegistrierenFID
Anders
Response.Write „Dieses Formular kann nur einmal eingereicht werden!“
Ende wenn
Sub beenden
%>
3. Einschränkungen und Verbesserungsmaßnahmen
Oben haben wir eine Methode eingeführt, um zu verhindern, dass dasselbe Formular während der aktuellen Sitzung mehrmals eingereicht wird. In praktischen Anwendungen müssen möglicherweise in vielen Aspekten Verbesserungen vorgenommen werden, zum Beispiel:
⑴ Überprüfen Sie vor der Registrierung der Formular-ID die Rechtmäßigkeit der vom Benutzer eingegebenen Daten, sodass der Benutzer bei illegalen Daten auf „Zurück“ klicken kann. Klicken Sie auf die Schaltfläche, um nach der Korrektur zurückzukehren und das gleiche Formular erneut abzusenden.
⑵ Diese Einschränkung der Formularübermittlung gilt höchstens für die Dauer der aktuellen Sitzung. Wenn diese Einschränkung für mehrere Sitzungen erforderlich ist, werden Cookeis oder eine Datenbank zum Speichern relevanter Daten verwendet.