Code前端首页关于Code前端联系我们

ThinkPHP框架Verify类验证码开发,以登录表单为例

terry 2年前 (2023-09-25) 阅读数 50 #后端开发

Think\Verify类可以支持验证码生成和验证功能。

下面是最简单的验证码生成方式:

$Verify = new \Think\Verify();
$Verify->entry();

上面的代码创建了一个默认的验证码图片并打印出来,如下图:

ThinkPHP框架Verify类验证码开发,登录表单为例

生成的验证码信息存储在session中,附带信息为:

array('verify_code'=>'当前验证码的值','verify_time'=>'验证码生成的时间戳')

如果需要在一页上生成多个验证码,则输入法必须传达可识别信息。

验证码参数

您可以为生成的验证码设置必要的参数,以达到不同的显示效果。这些参数是:

参数 说明
过期验证码有效时间(秒)
图片为默认值 useImgBg
字体大小验证码字体尺寸(像素)默认为25
useCurve是否使用混淆曲线,默认为true
useNoise默认值为W验证码宽度设置为0,用于自动计算
imageH将验证码高度设置为0,自动计算
长度检查❙ft❙t‷f❙t❙t确认码字体。默认是获取随机
useZh 是否使用中文验证码
bg验证码背景色 rgb 表设置如数组(243, 251, 254)
验证码加密密钥
codeSet 确认 新的代码字符集
zhSet验证码字符集(中文)新增

默认参数设置:

ThinkPHP框架Verify类验证码开发,登录表单为例

参数设置有两种方式。

实例化传入参数:

ThinkPHP框架Verify类验证码开发,登录表单为例

或者使用动态设置,如:

ThinkPHP框架Verify类验证码开发,登录表单为例

验证码字体

默认随机使用验证码字体 In/Thin/Think Library verify/ttfs/ 中的 Thin/Think 字体文件目录下,我们可以设置验证码字体,例如:

$Verify = new \Think\Verify();
// 验证码字体使用 ThinkPHP/Library/Think/Verify/ttfs/$Verify->fontttf = '';
$Verify->entry();

壁纸

支持验证码壁纸功能,可以设置如下:

$Verify = new \Think\Verify();
// 开启验证码背景图片功能 随机使用 ThinkPHP/Library/Think/Verify/bgs 目录下面的图片$Verify->useImgBg = true;
$Verify->entry();

中文验证码

如果你想使用中文验证码,可以设置:

$Verify = new \Think\Verify();
// 验证码字体使用 ThinkPHP/Library/Think/Verify/zhttfs/$Verify->useZh = true;
$Verify->entry();

显示效果如图:

ThinkPHP框架Verify类验证码开发,登录表单为例

如果没有正常显示,请确保没有正常显示。你的ThinkPHP/Library/Think/Verify/zhttfs/目录下有中文字体文件。

如果ThinkPHP/Library/Think/Verify/zhttfs/文件夹中没有中文字体文件,可以从C:\Windows\Fonts\下载或复制中文字体文件。请注意,字体文件扩展名为 .ttf。

验证码的识别

通过Think\Verify类的check方法,可以检查验证码是否输入正确。例如,封装的验证码识别函数如下:

// 检测输入的验证码是否正确,$code为用户输入的验证码字符串function check_verify($code, $id = ''){
$verify = new \Think\Verify();
return$verify->check($code, $id);
}

练习: 登录示例:

控制器方法:

<?php
namespace Home\Controller;
use Think\Controller;

class LoginController extends Controller
{
    function Login()
    {
        if(empty($_POST))
        {
            $this->display();    
        }    
        else
        {
            $code = $_POST["yzm"];
             $verify = new \Think\Verify();
           if($verify->check($code,2)) //code是用户输入的值 ,2是验证码检测标示,必须与生成的验证码标示相同才能验证            {
                if($_POST["uid"]!="" && $_POST["pwd"]!="")
                {
                    $model = D("Users");
                    $uid = $_POST["uid"];    
                    $pwd = $_POST["pwd"];
                    $attr = $model->field("Pwd")->find($uid);
                    //var_dump($attr);if($pwd==$attr["pwd"])
                    {
                        session("uid",$uid);   // 跳转页面之前将$uid存入session                    $this->success("登录成功!","Main");                                            }
                    else
                    {
                        $this->error("登录失败!");    
                    }
                }
                else
                    {
                        $this->error("用户名或者密码不能为空!");    
                    }
            }
            else
            {
                $this->error("验证码不正确!");    
            }
        }        
    }
//生成验证码的操作方法function yzm()
    {
        $config =    array(    
            'fontSize'    =>    30,    // 验证码字体大小    
            'length'      =>    4,     // 验证码位数  
            'useCurve'    =>    true,  // 是否画混淆曲线  
            'useNoise'    =>    true,  // 关闭验证码杂点
            'expire'      =>    60,    // 验证码有效期(秒)
            'useImgBg'    =>    false,  // 使用背景图片
            'useZh'       =>    true,  // 使用中文验证码
            'imageW'      =>    240,   // 验证码宽度
            'imageH'      =>    60,    // 验证码高度
            'fontttf'     =>    '', // 验证码字体        );
        $Verify = new \Think\Verify($config);
        $Verify->entry(2);//参数是生成验证码的标示,适用于同一个页面有多个验证码的时候,生成验证码的标示必须与检测验证码的标示相同,否则验证码不正确    }
?>

请求登录方法:

ThinkPHP框架Verify类验证码开发,登录表单为例

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门