ASPアプリケーションで同じフォームの再発行を制限

3433 ワード

インターネット上では毎日数え切れないほどのフォームに遭遇していますが、ほとんどのユーザーが同じテーブルを複数回コミットすることを制限していません.
シングル.このような制限が欠けていると、メールサービスの重複購読や投票の重複など、予想外の結果が生じることがあります.もしかすると
asp初心者は、aspアプリケーションで同じフォームの繰り返しコミットをどのように制限するか分からないので、ここではASPアプリケーションでの防止について説明します.
ユーザーが現在のセッション中に同じフォームを複数回コミットする簡単な方法です. 
この仕事は主に4つのサブルーチンで構成されており、簡単なアプリケーションの場合、これらのコードを含むファイルに直接置くだけでいいです.
引用を受ければいい.それらの複雑な環境について、私たちは文章の最後にいくつかの改善提案をしました.
一、基本作業過程
次に,この4つのサブプログラムについて順次議論する.  
(一)初期化
ここでは、Sessionオブジェクトに2つの変数を保存します.
⑴各フォームはFIDと呼ばれる一意の識別子に対応し、その値を一意にするためにカウンタを使用する.
(2)フォームが正常にコミットされるたびに、DictionaryオブジェクトにFIDを格納する必要があります.
上記のデータを初期化するために専用のプロセスを使用します.後で各サブルーチンが呼び出されますが、実際には各
セッション中に1回のみ実行されます.
 
  
Sub InitializeFID()
 If Not IsObject(Session("FIDList")) Then
  Set Session("FIDList")=Server.CreateObject("Scripting.Dictionary")
  Session("FID")=0
 End If
End Sub

(二)フォームを生成する一意の識別子
次の関数GenerateFID()は、フォームの一意のフラグを生成するために使用されます.この関数は、まずFID値に1を加算し、次に戻ります.
 
  
Function GenerateFID()
 InitializeFID
 Session("FID") = Session("FID") + 1
 GenerateFID = Session("FID")
End Function

(三)提出済フォームの登録
フォームが正常にコミットされると、Dictionaryオブジェクトに一意のIDが登録されます.
 
  
Sub RegisterFID()
 Dim strFID
 InitializeFID
 strFID = Request("FID")
 Session("FIDlist").Add strFID, now()
End Sub

(四)フォームが重複して提出されたかどうかを検査する
ユーザーが提出したフォームを正式に処理する前に、DictionaryオブジェクトでFIDが登録されているかどうかを確認する必要があります.下の
CheckFID()関数は、この作業を完了するために使用され、登録されている場合はFALSEに戻り、そうでない場合はTRUEに戻ります.
 
  
Function CheckFID()
 Dim strFID
 InitializeFID
 strFID = Request("FID")
 CheckFID = not Session("FIDlist").Exists(strFID)
End Function

二、どのように使うか
フォーム生成時と結果処理時の2つの関数を使用します.上記の4つのサブプログラムがすでにパッケージに含まれていると仮定します.
件Forms.incでは、以下のコードは、FID値に基づいてフォームを生成するか、フォーム結果を処理するかを決定し、説明する処理手順が適切である
ほとんどのASPアプリケーション:
 
  






If Request("FID") = "" Then
GenerateForm
Else
ProcessForm
End If
%>



GenerateFormはフォームの生成を担当し、フォームには次のような非表示のFIDが含まれている必要があります.
 
  
Sub GenerateForm()
%>
" method=GET>
">



End Sub
%>

ProcessFormはフォームから送信されたコンテンツの処理を担当しますが、処理前にCheckFID()を呼び出して現在のフォームが既に存在するかどうかを確認する必要があります.
コミットされたコードクラスは次のとおりです.
 
  

Sub ProcessForm()
 If CheckFID() Then
  Response.Write " " & Request.QueryString("param1")
  RegisterFID
 Else
  Response.Write " !"
 End If
End Sub
%> 

三、制限と改善措置
上記では、現在のセッション中に同じフォームが複数回コミットされることを制限する方法について説明します.実際のアプリケーションでは
さまざまな点で改善されています.たとえば、次のようになります.
⑴フォームIDを登録する前に、ユーザーが入力したデータの正当性を確認し、データが正当でない場合、ユーザーは「戻る」ボタンを押すことができる
を返します.
(2)このようなフォームのコミットに対する制限は、現在のセッション中にのみ有効です.この制限が複数のセッションにまたがるように要求される場合
では、Cookeisやデータベースを使って関連データを保存します.