场景有三种: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