在ASP應用程序中限制重復提交同一表單
2024-05-04 11:02:44
供稿:網友
在Internet上我們每天都會遇到數不清的表單,也看到其中大部分并沒有限制用戶多次提交同一個表
單。缺乏這種限制有時候會產生某些預料不到的結果,如重復訂閱郵件服務或重復投票等?;蛟S一些
asp初學者并不清楚在asp應用中如何限制重復提交同一表單,所以在這里向大家介紹在ASP應用中防止
用戶在當前會話期間多次提交同一表單的一個簡單方法。
這個工作主要由四個子程序組成,在較為簡單的應用場合,你只要將這些代碼放在包含文件中直
接引用即可;對于那些較為復雜的環境,我們在文章的最后給出一些改進建議。
一、基本工作過程
下面我們依次討論這四個子程序。
?。ㄒ唬┏跏蓟?
這里我們要在Session對象中保存兩個變量,其中:
⑴ 每一個表單對應一個稱為FID的唯一標識,為使該值唯一要用到一個計數器。
⑵ 每當一個表單成功提交,必須在一個Dictionary對象中存儲它的FID。
我們用一個專用的過程來初始化上述數據。雖然以后各個子程序都要調用它,但實際上每一個會
話期間它只執行一次:
復制代碼 代碼如下:
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對象中登記它的唯一標識:
復制代碼 代碼如下:
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
二、如何使用
有兩個地方要用到上述函數,即表單生成時與結果處理時。假設上述四個子程序已經放入包含文