项目中防止表单重复提交

项目中需要很多的表单和后台提交,若表单提交过快,而后台使用的是事务处理,则会形成执行延迟,导致执行多遍,出现数据错乱,因此需要进行PHP表单令牌验证,于是自己写了一个类似的表单验证类。

实现原理为:在提交表单后,形成一个唯一的token值,(或者用另一种方法session),当表单提交时候,去验证session中该token是否已经存在,若是已经存在就说明该表单已经提交过了,直接返回false,若不存在则为第一次提交,继续执行后续程序

<?php  
/**
 * 表单令牌(防止表单恶意提交)
 */  
class Form_token_Core{  
    const SESSION_KEY = 'SESSION_KEY';  
    /**
     * 生成一个当前的token
     * @param string $form_name
     * @return string
     */  
    public static function grante_token($form_name)  
    {  
        $key = self::grante_key();  
        $_SESSION['SESSION_KEY.$form_name'] = $key;  
        $token = md5(substr(time(), 0, 3).$key.$form_name);  
        return $token;  
    }  
   
    /**
     * 验证一个当前的token
     * @param string $form_name
     * @return string
     */  
    public static function is_token($form_name,$token)  
    {  
        $key = $_SESSION['SESSION_KEY.$form_name'];  
        $old_token = md5(substr(time(), 0, 3).$key.$form_name);  
        if($old_token == $token)  
        {  
            return true;  
        } else {  
            return false;  
        }  
    }  
   
    /**
     * 删除一个token
     * @param string $form_name
     * @return boolean
     */  
    public static function drop_token($form_name)  
    {  
        $session->delete(SESSION_KEY);  
        return true;  
    }  
   
    /**
     * 生成一个密钥
     * @return string
     */  
    public static function grante_key()  
    {  
        $encrypt_key = md5(((float) date("YmdHis") + rand(100,999)).rand(1000,9999));  
        return $encrypt_key;  
    }  
}  
?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值