1. 程式人生 > >防止表單重複提交的幾種方法總結

防止表單重複提交的幾種方法總結

版權宣告:本文為博主原創文章,未經博主允許不得轉載。 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”) %>”>

--%>