場景有三種:javascript
1:在網絡延遲的狀況下讓用戶有時間點擊屢次submit致使重複提交java
2:表單提交後點擊「刷新」按鈕致使重複提交瀏覽器
3:提交後,點擊瀏覽器的後退而後再次提交服務器
解決的思路有經常使用的幾種:網絡
一、經過JS,提交表單以後將按鈕設置爲不可用。session
<script type="text/javascript">
var isCommitted = false;//表單是否已經提交標識,默認爲false
function dosubmit(){
if(isCommitted==false){
isCommitted = true;//提交表單後,將表單是否已經提交標識設置爲true
return true;//返回true讓表單正常提交
}else{
return false;//返回false那麼表單將不提交
}
}
</script>spa
二、或者在提交表單的js中設置一個變量做爲標識,默認爲false,表單提交以後就愛那個標識改成true。orm
<script type="text/javascript">
var isCommitted = false;//表單是否已經提交標識,默認爲false
function dosubmit(){
if(isCommitted==false){
isCommitted = true;//提交表單後,將表單是否已經提交標識設置爲true
return true;//返回true讓表單正常提交
}else{
return false;//返回false那麼表單將不提交
}
}
</script>blog
三、利用session解決。作法:在服務器端生成一個惟一的隨機標識號,專業術語:Token(令牌)。同時在當前用戶的Session中保存這個Token。而後將Token發送到客戶端的Form表單中在表單中使用隱藏域來存儲這個Token。表單提交的時候連同這個Token一塊兒提交到服務器端。而後在服務器端判斷客戶端提交上來的Token與服務器生成的是否同樣。不同就是重複提交了,此時服務器就不能夠處理重複提交的表單。處理完後清除當前用戶的Session中存儲的標識號。ip