一.使用session防止重复提交
其实跟验证码一样的原理,主要是生成session和input隐藏域,
这边我的代码是在一个页面中处理。
<?php
header('Content-type:text/html; charset=utf-8'); //页面编码
session_start(); //开启session
if(isset($_POST['submit'])){ //判断是否是表单提交
if($_SESSION['code'] != $_POST['code']){ //令牌判断
die('重复提交');
}
$_SESSION['code'] = '';
//-------------这边用于处理代码-
die('跳转');
}else{
//不是表单提交就生成code代码
$res = md5(uniqid( rand(),false));
$_SESSION['code'] = $res;
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>重复提交</title>
</head>
<body>
<form method="post" action="submit.php">
<input type="text" name="user" />
<input type="hidden" name="code" value="<?php echo $_SESSION['code']; ?>" />
<input type="submit" name="submit" />
</form>
</body>
</html>
2.下面代码是网上的
<?php
/*
* PHP简单利用token防止表单重复提交
* 此处理方法纯粹是为了给初学者参考
*/
header('Content-type:text/html; charset=utf-8');
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>