PHP 防止表单重复提交

原理是:首先在表单页生成一个 随机不重复的 token(可以利用时间戳),把 token 的值分别存入 session 和 表单的隐藏域;当提交表单的时候,在接收页对比传递过来的 token 和session 中的 token ,当两者相等时,重新生成一个 token 并存入 session。此时如果重复提交表单,则必然session 中新的 token 值不等于 post 来的 token。

代码:

表单页 post.php

 1 session_start();  

 2 

 3 $token = md5(microtime(true));

 4 $_SESSION['token'] = $token;

 5 

 6 ?>  

 7 <form method='post' action='post2.php'>  

 8     <input type="text" name="token" value="<?php echo $token;?>">  

 9     <input type="text" name="test" value="value<?php echo mt_rand(1,9999);?>">  

10     <input type="submit">  

11 </form>

接收页 post2.php

 1 <?php

 2 session_start();

 3 if(isset($_SESSION['token'])){

 4     $token = $_SESSION['token'];

 5 }else{

 6     $token = '';

 7 }

 8 if(isset($_POST['test'])){  

 9     if($_POST['token'] != $token){  

10         echo '重复提交 <br />';  

11     }else{  

12         echo 'success';  

13         $token = md5(microtime(true));

14         $_SESSION['token'] = $token;

15     }  

16 }

 

你可能感兴趣的:(重复提交)