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 }

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。