限制同一表單多次提交的分析,網站搭建
導讀:網站搭建網站搭建同一表單多次提交有時候會產生某些預料不到的結果,比如重復訂閱郵件或重復 投票等。 本文介紹在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
二、如何使用
有兩個地方要用到上述函數,即 表單生成時與結果處理時。假設上述四個子程序已經放入包含文件Forms.inc中 ,下面的代碼根據FID值來決定生成表單還是處理表單結果,它所描述的處理過 程適合于大多數ASP應用:
Option Explicit
If Request("FID") = "" Then
GenerateForm
Else
ProcessForm
End If
GenerateForm負責生成表 單,表單中應該含有一個隱藏的FID,如:
Sub GenerateForm()
End Sub
ProcessForm負責處理通過表單提交的內容,但在處理之前應該先調用 CheckFID()檢查當前表單是否已經提交,代碼類如:
Sub ProcessForm()
If CheckFID() Then
Response.Write "你輸入的內容 是"Request.QueryString("param1")
RegisterFID
Else
Response.Write "此表單只能提交一次!"
End If
End Sub
三、同一表單多次提交的限制與改進措施
上面我們介紹了在當前 會話期間限制同一表單多次提交的一種方法。在實際應用中可能需要從多方面加 以改進,例如:
⑴ 在登記表單ID之前檢查用戶輸入數據的合法性,使 得數據不合法時用戶可以按“后退”按鈕返回,在修正后再次提交同一表單。
⑵ 這種同一表單多次提交的限制最多只能在當前手機模板dede會話期間有效。如果 要求這種限制能夠跨越多個會話,那么就要用到Cookeis或數據庫來保存相關數 據了。
⑶ 這種方法是不安全的。它僅用于防范誤操作,不能防止熟練 用戶有意地同一表單多次提交;
還有一種只需使用幾行代碼的方法,輕松地 實現了防止用戶同一表單多次提交和使用后退鈕重復多次提交表單。
表單文件formtest.asp
Randomize '初始代隨機數種子
num1=rnd() '產 生隨機數num1
num1=int(26*num1)+65 '修改num1的范圍以使其是A-Z范 圍的Ascii碼,以防表單名出錯
session("antry")="test"&chr(num1) '產生隨機字符串
你的名字: '注意本行中使用了隨機表單項名
表單處理程序 testact.asp
teststr=request.form(session("antry"))
if teststr="" then
response.write "沒有填寫姓名或重復提交"
'由于用 戶沒有填寫名字,或表單被重復提交(標志為session("antry")為空)引起
else
response.write teststr
session("antry")="" '提交成功 ,清空session("antry"織夢模板網;),以防同一表單多次提交!
end if
在這里 ,你只需隨機化一個必填項目的表單項名即可,不必隨機化所有的表單項目。達 到了限制同一表單多次提交的問題相關技術支持網站建站技術模板。
聲明: 本文由我的SEOUC技術文章主頁發布于:2023-08-08 ,文章限制同一表單多次提交的分析,網站搭建主要講述表單,網站搭建網站建設源碼以及服務器配置搭建相關技術文章。轉載請保留鏈接: http://www.bifwcx.com/article/web_38115.html
- 上一篇:網站優化重在實踐應用,網站搭建
- 下一篇:建立網站可為企業帶來什么,seo建站技術