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 }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值