设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php 表单令牌防止重复提交原理

发布时间:2022-02-10 14:20 所属栏目:121 来源:互联网
导读:在生成表单的时候,为防止表单重复提交。在form表单中添加一个隐藏的input标签来存放令牌,等到提交的时候,和表单一起提交,提交以后和生成的session值作比较,通过这种方式来达到防止重复提交的目的,简要代码如下. 例子,session方法,代码如下: ?php if($_POST){
  在生成表单的时候,为防止表单重复提交。在form表单中添加一个隐藏的input标签来存放令牌,等到提交的时候,和表单一起提交,提交以后和生成的session值作比较,通过这种方式来达到防止重复提交的目的,简要代码如下.
 
  例子,session方法,代码如下:
 
  <?php
  if($_POST){
      if($_SESSION["token"]!=$_POST["token"]){
          die("非法提交!");
      }else{
          echo "安全提交!";
      }
  }
  $_SESSION["token"]=md5(rand(1,999));//没生成一次表单,修改一次值,不要在post处理前修改它,不然无法比对 www.Cuoxin.com
  ?> //开源代码Cuoxin.com
  <form action="1.php" method="post">
  <input type="hidden" value="<?php echo $_SESSION["token"]?>" name="token">
  <input type="submit" value="提交" />
  </form>
  例子,cookie+md5方法,代码如下:
 
  <?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的值相同,告知用户提交失败 ,为重复提交表单
  
  }
  
  ?> 

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读