避免表單重複提交

2021-08-29 06:13:07 字數 956 閱讀 9574

偶然發現了乙個小問題,在有些人做的資訊系統中,在瀏覽器上選擇後退或重新整理時,如果在編寫程式的時候不處理,很容易導致重複提交,這樣原本像伺服器傳送的「發表帖子」的命令,就會被傳送兩次或多次,導致在資料庫中插入多條記錄。那麼如何避免這種情況呢?

其實我們可以在發表帖子的方法開頭加上乙個if判斷即可。

if (isredo(request,"topic_add")) 

其中isredo方法定義為:

}該方法,首先判斷session中是否含有名為key的變數。如果沒有,就判斷是「重複提交」;否則,就判斷為「第一次處理」,並將該屬性 從session變數中刪除,那麼在瀏覽器後退或重新整理導致重複提交的時候,再次呼叫該方法就會發現該屬性為空,因此判斷為「重複提交」。

其中,key是在發表帖子的方法中寫入到session中去的:

session.setattribute("topic_add","topic_add");

也就是說在頁面請求的時候,就會把key寫入到session中,並在第一次提交的時候由程式把key從session中刪除。從而達到判斷是否重複提交的目的。

除了這種簡單的方法以外,一般通常利用struts同步令牌(token)機制來解決web應用中的重複提交問題。該方法的基本原理是:服 務器端在處理到達的request之前,會將request中的token值與儲存在當前使用者session中的令牌值進行比較,看是否匹配。在處理完該 request後,且在response傳送給客戶端之前,將會產生乙個新的 token,該token除傳給客戶端以外,也會將使用者session中保 存的舊的token進行替換。這樣,如果使用者會退到剛才的提交頁面並再次提交的話,客戶端傳過來的token值和伺服器端的不一致,從而有效地防止了重複 提交地發生。利用struts這種方法和前面給出的方法原理上是一樣的,只是在具體實現上不同而已。

表單重複提交

1.session token的方式 當表單載入時候,前端向伺服器申請乙個token,同時,伺服器將token放在session中。當提交表單時候,引數中帶著token,伺服器校驗token,如果相同則放行,同時清除session。如果不同,則說明重複提交。需要注意的是,如果請求返回了,或者重新整理...

防止表單重複提交

新增乙個使用者時,發現重複新增了4 5個,原來是重複提交了。怎麼解決這個問題呢,起初是在後端檢查新增的屬性是否已有,例如姓名和手機號是否重複,如果重複就不儲存,沒想到後來隨著業務的複雜化,新增乙個使用者所需時間越來越長,以致在檢查時還沒插入完畢。那就在提交時就關閉form,可是這樣一來,如果後端檢查...

防止表單重複提交

防止表單重複提交 問題 什麼是表單重複提交?regist.jsp registservlet 表單重複提交 危害 刷票 重複註冊 帶來伺服器訪問壓力 拒絕服務 解決方案 在頁面上生成乙個令牌 就是乙個隨機字串 將其儲存到session中,並在表單中攜帶.在伺服器端,獲取資料時,也將令牌獲取,將它與s...