码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2015-08-10 13:30:02      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

1、提交按钮置disabled
当用户提交后,立即把按钮置为不可用状态。这种用js来实现。
提交前代码如下:

$("#submit").attr(disabled,true);
$("#submit").val("正在提交,请稍等");
执行后,把按钮置为原来状态
代码如下:

$(#submit ).removeAttr(disabled);
$("#submit ").val("确定提交");
这样只是针对一些简单的前台提交了,如果我们自己做个表单站长提交给我们php逻辑层文件就过滤这那个js了。
过期时间法
用户提交按钮后生成一个token(每次业务提交token 为唯一值)存入session,并设置过期时间。当用户再此提交时,检测token是否一致且是否过期,若一致且没有过期,则认为提交了二次
例子

<?php
/*
* 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];
  }
}
?>
<form method="post" action="">
  <input type="hidden" name="token" value="<?php echo $_SESSION[‘token‘]?>">
  <input type="text" name="test" value="Default">
  <input type="submit" value="提交" />
</form>
方法二

<?php
//开启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();
?>
<!doctype html>
<html>
<head>
  <meta charset="UTF-8">
  <title>post</title>
</head>
<body>
  <form action="post.php?action=save" method="post">
  <ul>
    <li>
     <input type="hidden" name="auth" value="<?php echo $auth;?>">
     <input type="text" name="userName">
    </li>
    <li>
     <input type="password" name="userpass">
    </li>
    <li>
     <input type="submit" value="走起">
    </li>
    <li>
     <?php echo time(); ?>
    </li>
   </ul>
  </form>
</body>
</html>
mysql php数据库重复记录防止

<?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这个原理也差不多。

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

标签:

原文地址:http://www.cnblogs.com/qhorse/p/4717633.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!