php 表单令牌防止刷新表单重复提交的两种方法

时间:2016-06-18
本文章向大家介绍php表单令牌防止刷新表单重复提交的两种方法,第一种方法是使用session方法,第二种方法是使用cookie方法,需要的朋友可以参考一下。

session方法

1、提交页面

<?php
    session_start();
    $t=mktime();
    $_SESSION['conn_id']=$t;
    $_SESSION['conn']=$t;
    var_dump($_SESSION);
    var_dump($_COOKIE);
?>
<html>
<head>
<title>防止刷新提交或者重新提交</title>
</head>
<body>
<form method="POST" action="get.php">
<span>username:</span><input type="text" name="username" id="username"><br>
                     <input type="hidden" name="hidden" id="hidden" value="<?php echo $_SESSION['conn_id']?>">
<span>message:</span><input type="text" name="message" id="message"><br>
                     <input type="submit" value="submit">
</form>
</body>
</html>


2、服务器端接收页面

<?php
     session_start();
     $username = $_POST['username']."<br>";
     $message  = $_POST['message'];
     $hide     = $_POST['hidden'];
     var_dump($_SESSION);
    if($hide==$_SESSION['conn'])
    {
        echo "亲,提交成功了哦";
    }else
    {
    echo "<script>alert('亲!就知道你会刷新提交,stop 你已经提交成功啦');</script>";
    echo "<script>window.location.href='index.php';</script>";
    }
    session_destroy();
?>

cookie方法

<?php
$value = $_COOKIE[“value”]; //读取上一次设置的Cookie值
if(count($_POST)) {
$long = “”;
while(list($key,$value)=each($_POST))$long.=$value;
$hash = md5($long);
setcookie(“value”,$hash,time()+60*60); //重新设置cookie
}
if($value!=$hash) {
// 如果两次的MD5值不一样就对数据进行进一步操作
} else {
//如果两次MD5的值相同,告知用户提交失败 ,为重复提交表单
}
?>