防止表单重复提交

Posted mengor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了防止表单重复提交相关的知识,希望对你有一定的参考价值。

首先从前端做限制。前端javascript在按钮被点击一次后禁用,即disabled,这个方法简单的防止了多次点击提交按钮,但是缺点是如果用户禁用了javascript脚本则失效。第二,我们可以在提交后做redirect页面重定向,即提交后跳转到新的页面,主要避免F5重复提交,但是也有不足之处。第三,就是数据库做唯一索引约束。第四,就是做session令牌验证。

                <button onClick="article_save_submit(this);" class="btn btn-primary radius" type="button"><i
                        class="Hui-iconfont">&#xe632;</i> 保存并提交
                </button>

<script>
    function article_save_submit(obj){
      obj.disabled = true;
    }
</script>
<?php
/*
* PHP简单利用token防止表单重复提交
*/
session_start();
header("Content-Type: text/html;charset=utf-8");
function set_token() {
    $_SESSION[‘token‘] = md5(microtime(true));
}

function valid_token() {
    $return = $_REQUEST[‘token‘] === $_SESSION[‘token‘] ? true : false;
    set_token();
    return $return;
}

//如果token为空则生成一个token
if(!isset($_SESSION[‘token‘]) || $_SESSION[‘token‘]==‘‘) {
    set_token();
}

if(isset($_POST[‘web‘])){
    if(!valid_token()){
        echo "token error,请不要重复提交!";
    }else{
        echo ‘成功提交,Value:‘.$_POST[‘web‘];
    }
}else{
?>
    <form method="post" action="">  
        <input type="hidden" name="token" value="<?php echo $_SESSION[‘token‘]?>">  
        <input type="text" class="input" name="web" value="www.helloweba.net">  
        <input type="submit" class="btn" value="提交" />  
    </form>
<?php    
}
?>

 

以上是关于防止表单重复提交的主要内容,如果未能解决你的问题,请参考以下文章

防止表单重复提交token

防止在jQuery中重复提交表单

Struts中防止表单重复提交

Jquery 实现表单提交按钮变灰,防止多次点击提交重复数据

token防止前端重复提交

Jquery 实现表单提交按钮变灰,防止多次点击提交重复数据