表单的重复提交问题

如何防止表单的重复提交...

问题分析:
1、你怎么知道提交的表单是重复的?
2、确认了表单是重复的,如何去防止被提交...

问题解答:
1、个人认为:对同一个表单做了相同的重复操作...就认为是重复表单...也即每次提交表单的内容是相同的就认为是重复的...
2、解决办法:
  js解决:
(1)对按钮进行控制

var $button = document.getElementById("btn");//获取button对象
    $button.attr("disabled","disabled");
    window.setTimeout(function(){
    $button.removeAttr("disabled");},1000);    

当然这么操作的前提是,你在disbaled后,要对表单进行处理,比如清空操作...

(2)做状态位进行标识...

<script language="javascript"> 
var checkSubmitFlg = false; 
function checkSubmit() { 
    if (!checkSubmitFlg) { 
        checkSubmitFlg = true; 
        return true; 
        }
    else{ 
            alert("不能重复提交"); 
            return false; 
            } 
} 
</script>                         
<form action="XXXX" method="POST" onsubmit="return checkSubmit()"> 
内容:<input type="text" name="content" value=""/><br> 
<input type="submit" value="提交"><br> 
</form>

疑问:做这种标识,如何判断你是换了另一个表单...

(3)加验证码,在每次提交时进行验证...防止重复提交..

后台程序解决:
大概主要用到一个token机制..
可以参考struts2的token机制,还有Token Session(令牌机制)
在每次表单提交时,action会调用isValidToken()方法,进行判断是否相同的token,如果相同,
进行提交,如果不同,认为是重复提交..
当然这种前提是:
在你打开新增表单的时候,会调用action,生成token码..然后在你的表单和session中各保存一份,
当提交调用action时,会进行token检查,并且在action处理完后,会重置session 中的token,此时你再提交,
就会导致token不一致,没法提交...当然...意思就是要重新调用action生成新的token,和session保持一致...

原文地址:https://www.cnblogs.com/lovebaoqiang/p/3753488.html