1、JavaScript防止表單重復提交(主要用于網(wǎng)絡延遲情況下用戶點擊多次submit按鈕導致表單重復提交)
在jsp頁面中,添加JavaScript代碼來防止表單的重復提交。主要是針對在網(wǎng)絡延遲情況下用戶有時間點擊多次submit按鈕導致表單重復提交,使用javascript控制Form表單只能提交一次。
<script type=”text/javascript”>
Var isCommitted = false; //表單是否應提交標識,默認為false
function dosubmit() {
If(isCommitted == false){ //提交表單后,將表單是否已經(jīng)提交設置為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為每次產(chǎn)生的表單頁面分配一個唯一的隨機標識號(Token令牌),并在FORM表單的一個隱藏字段中設置這個標識號,同時在當前用戶的Session域中保存這個標識號。
(2)、當用戶提交FORM表單時,負責處理表單提交的serlvet得到表單提交的標識號,并與session中存儲的標識號比較,如果相同則處理表單提交,處理完后清除當前用戶的Session域中存儲的標識號。如果不一致,就是重復提交了,此時服務器端就可以不處理重復提交的表單了。
(3)、服務器程序將拒絕用戶提交的表單請求情況如下:
1):存儲Session域中的表單唯一的標識號與表單提交的標識號不同
2):當前用戶的Session中不存在表單標識號
3):用戶提交的表單數(shù)據(jù)中沒有標識號字段
(4)、創(chuàng)建標識號
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”) %>”>
--%>