>  기사  >  백엔드 개발  >  PHP生成token防止表单重复提交

PHP生成token防止表单重复提交

WBOY
WBOY원래의
2016-06-23 13:25:53944검색

1、提交按钮置disabled

当用户提交后,立即把按钮置为不可用状态。这种用js来实现。

提交前代码如下:


$("#submit").attr('disabled','true');

$("#submit").val("正在提交,请稍等");

执行后,把按钮置为原来状态

代码如下:


$('#submit ').removeAttr('disabled');

$("#submit ").val("确定提交");

这样只是针对一些简单的前台提交了,如果我们自己做个表单站长提交给我们php逻辑层文件就过滤这那个js了。

过期时间法

用户提交按钮后生成一个token(每次业务提交token 为唯一值)存入session,并设置过期时间。当用户再此提交时,检测token是否一致且是否过期,若一致且没有过期,则认为提交了二次

例子


/*

* PHP简单利用token防止表单重复提交

* 此处理方法纯粹是为了给初学者参考

*/

session_start();

function set_token() {

$_SESSION['token'] = md5(microtime(true));

}

function valid_token() {

  $return = $_REQUEST['token'] === $_SESSION['token'] ? true : false;

  set_token();

  return $return;

}

//如果token为空则生成一个token

if(!isset($_SESSION['token']) || $_SESSION['token']=='') {

  set_token();

}

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

if(!valid_token()){

  echo "token error";

  }else{

  echo '成功提交,Value:'.$_POST['test'];

  }

}

?>

 

 

 

方法二


//开启session

session_start();

//如果有提交标识

if(isset($_GET['action']) && $_GET['action'] === 'save'){

  //如果有session且跟传过来的值一样才算提交

  if(isset($_SESSION['__open_auth']) && isset($_POST['auth']) && $_SESSION['__open_auth'] == $_POST['auth']){

  print_r($_POST);

  $_SESSION['__open_auth'] = null;//清空

  } else {

  //走起

  header("location: post.php");

  }

  exit();

}

//授权

$auth = $_SESSION['__open_auth'] = time();

?>

 

 

post

 

 

       

  •    

       

       

  •    

  •    

       

  •    

  •    

       

  •    

  •    

       

  •  

 

mysql php数据库重复记录防止


$link=mysql_connect(‘localhost’,’root’,’root’); //得到MySQL数据库连接 

$username=$_GET["name"]; //得到从客户端表单传过来的数据 

$q="select * from usertable where user_name='$username'"; 

mysql_query("SET NAMES gb2312"); //避免出现中文乱码 

$rs = mysql_query($q, $link); //查询数据库 

$num_rows = mysql_num_rows($rs); //得到查询结果的总行数 

if($num_rows==0) 

$exec="insert into student (user_name) values ($username)"; 

mysql_query("SET NAMES gb2312"); 

mysql_query($exec, $link); //若没有此用户则将数据插入到数据库(注册用户) 

echo "用户注册成功!"; 

else 

echo "该用户名已存在,请重新选择用户名!"; 

?>

session过期法有非常重要的一点是一个session设置与提交成功与不成功时的一个session验证了,这个有点像登录一样的如果登录成功了我们要清除session这个原理也差不多。

<br />


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:homebrew 安装php다음 기사:php tiff格式图片转JPG