PHP利用token防止表单重复提交
ps:本人亲测,阿里云2核4G5M的服务器性价比很高,新用户一块多一天,老用户三块多一天,最高可以买三年,感兴趣的可以戳一下:阿里云折扣服务器
<?php
/*
* PHP简单利用token防止表单重复提交
*/
/*
基本思路:
1、先判断session中的token是否设置,如果没有则设置token的值(加密的时间格式)
2、判断是否提交了数据,如果没有提交数据,则显示表格,如果提交了数据则进行判断
3、进行数据判断的时候先拿表单提交的token值和Php中本身第一次设置的session值进行判断,一样则返回true,不一样返回false,然后再次重新设置session中token的值
4、最后进行显示,如果数据判断中返回的是true则提示提交成功,如果返回的是false则提示不能重复提交
*/
//开启session
session_start();
//设置编码格式为UTF-8
header("content-type:text/html;charset=utf-8");
//设置token的值
function set_token(){
//给token令牌设定值,microtime返回的是unix时间戳
$_SESSION['token']=md5(microtime(true));
}
//判断是否重复提交
function valid_token(){
$res=$_POST['token']==$_SESSION['token']?true:false;
set_token();
return $res;
}
//判断令牌是否为空
if (empty($_SESSION['token'])) {
set_token();
}
//判断是否提交了数据
if (!empty($_POST['web'])) {
if (!valid_token()) {
echo '不要重复提交';
}else{
echo '提交成功';
}
}else{
?>
<form method="post" action="">
<input type="hidden" name="token" value="<?php echo $_SESSION['token'];?>">
<input type="text" class="input" name="web" value="www.jb51.net">
<input type="submit" class="btn" value="提交" />
</form>
<?php
}