防止表單重複提交的幾種方法總結
版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/Warpar/article/details/72917924
1、JavaScript防止表單重複提交(主要用於網路延遲情況下使用者點選多次submit按鈕導致表單重複提交)
在jsp頁面中,新增JavaScript程式碼來防止表單的重複提交。主要是針對在網路延遲情況下使用者有時間點選多次submit按鈕導致表單重複提交,使用javascript控制Form表單只能提交一次。
<script type=”text/javascript”>
Var isCommitted = false; //表單是否應提交標識,預設為false
function dosubmit() {
If(isCommitted == false){ //提交表單後,將表單是否已經提交設定為true
isCommitted = true; //返回true讓表單正常提交
return true;
}else{
return false; //返回false表單不提交
}
}
</script>
2、將提交按鈕設定為不可用,讓使用者點選第一次提交之後,沒有機會點選第二次提交按鈕的機會。(也可以將提交按鈕隱藏起來,在點選第一次之後,將提交按鈕隱藏起來)
function dosubmit() {
//獲取表單提交按鈕
Var btnSubmit = documen.getElementById(“sumit”);
//將表單提交按鈕設定為不可用,可以避免使用者再次點選提交按鈕進行提交
btnSubmit.disabled = “disabled”;
//返回true讓表單可以提交
return true;
}
3、利用Session防止表單重複提交(主要用於表單提交之後,點選瀏覽器重新整理按鈕導致表單重複提交,以及點選瀏覽器返回按鈕退回到表單頁面後進行再次提交)
(1)、表單頁面由servlet程式(伺服器端)生成,servlet為每次產生的表單頁面分配一個唯一的隨機標識號(Token令牌),並在FORM表單的一個隱藏欄位中設定這個標識號,同時在當前使用者的Session域中儲存這個標識號。 (2)、當用戶提交FORM表單時,負責處理表單提交的serlvet得到表單提交的標識號,並與session中儲存的標識號比較,如果相同則處理表單提交,處理完後清除當前使用者的Session域中儲存的標識號。如果不一致,就是重複提交了,此時伺服器端就可以不處理重複提交的表單了。 (3)、伺服器程式將拒絕使用者提交的表單請求情況如下: 1):儲存Session域中的表單唯一的標識號與表單提交的標識號不同 2):當前使用者的Session中不存在表單標識號 3):使用者提交的表單資料中沒有標識號欄位
(4)、建立標識號
String token = TokenProccessor.getInstance().makeToken();
(5)、在伺服器端使用Session儲存標識號
request.getSession().setAttribute(“token”,token);
(6)、在form表單中也就是JSP頁面中,使用隱藏域來儲存標識號(Token令牌)
(可以使用EL表示式取出儲存在Session域中的token)
<%--
<input type=”hidden” name=”token” value=”<%=session.getAttribute(“token”) %>”>
--%>