ThinkPHP框架之验证码

TP框架中Think\Verify类可以支持验证码的生成和验证功能。具体文件:ThinkPHP/Library/Think/Verify.class.php

生成验证码

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

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

上面的代码会生成默认的验证码图片并输出,显示如下:

生成的验证码信息会保存到session中,包含的数据有:

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

如果你需要在一个页面中生成多个验证码的话,entry方法需要传入可标识的信息。

验证码参数

可以对生成的验证码设置相关的参数,以达到不同的显示效果。这些参数包括:

参数 描述
expire 验证码的有效期(秒)
useImgBg 是否使用背景图片 默认为false
fontSize 验证码字体大小(像素) 默认为25
useCurve 是否使用混淆曲线 默认为true
useNoise 是否添加杂点 默认为true
imageW 验证码宽度 设置为0为自动计算
imageH 验证码高度 设置为0为自动计算
length 验证码位数
fontttf 指定验证码字体 默认为随机获取
useZh 是否使用中文验证码
bg 验证码背景颜色 rgb数组设置,例如 array(243, 251, 254)
seKey 验证码的加密密钥
codeSet 验证码字符集合 3.2.1 新增
zhSet 验证码字符集合(中文) 3.2.1 新增

默认参数配置:

参数设置使用两种方式。

实例化传入参数:

或者采用动态设置的方式,如:

验证码字体

默认情况下,验证码的字体是随机使用 ThinkPHP/Library/Think/Verify/ttfs/目录下面的字体文件,我们可以指定验证码的字体,例如:

  1. $Verify = new \Think\Verify();
  2. // 验证码字体使用 ThinkPHP/Library/Think/Verify/ttfs/5.ttf
  3. $Verify->fontttf = ‘5.ttf‘;
  4. $Verify->entry();

背景图片

支持验证码背景图片功能,可以如下设置:

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

中文验证码

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

  1. $Verify = new \Think\Verify();
  2. // 验证码字体使用 ThinkPHP/Library/Think/Verify/zhttfs/simhei.ttf
  3. $Verify->useZh = true;
  4. $Verify->entry();

显示效果如图:

如果无法正常显示,请确认你的 ThinkPHP/Library/Think/Verify/zhttfs/ 目录下面存在中文字体文件。

若ThinkPHP/Library/Think/Verify/zhttfs/里面没有中文字体文件,可以下载或者从C:\Windows\Fonts\里面找到中文字体文件复制过来,注意字体文件扩展名为.ttf。

验证码检测

可以用Think\Verify类的check方法检测验证码的输入是否正确,例如,下面是封装的一个验证码检测的函数:

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

练习:以登录为例:

控制器方法:

<?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‘     =>    ‘simhei.ttf‘, // 验证码字体
        );
        $Verify = new \Think\Verify($config);
        $Verify->entry(2);//参数是生成验证码的标示,适用于同一个页面有多个验证码的时候,生成验证码的标示必须与检测验证码的标示相同,否则验证码不正确
    }

模板页面:

<load href="__PUBLIC__/Js/jquery-1.11.2.min.js" />
<style type="text/css">
#sx{ color:#33F; text-decoration:underline; cursor:pointer;}
</style>
</head>

<body>
<h1>登录页面</h1>
<form action="__ACTION__" method="post">
<div>用户名:<input type="text" name="uid" /></div><br />
<div>密码:&nbsp;<input type="password" name="pwd" /></div><br />
<div>验证码:<input type="text" name="yzm" /></div><br />
<!--src指向方法 -->
<div><img src="__CONTROLLER__/yzm" id="yzm" alt="验证码" /><span id="sx">看不清楚,换一张</span></div>
<input type="submit" value="登录" />
</form>

</body>
</html>
<script type="text/javascript">
$(document).ready(function(e) {
      $("#sx").click(function(){
        $("#yzm").attr("src","__CONTROLLER__/yzm");//更新src属性
        })
});

</script>

请求Login方法:

时间: 2024-08-04 07:33:35

ThinkPHP框架之验证码的相关文章

ThinkPhp框架:验证码功能

一.单个验证码 1.依旧可以沿用上传功能所新建的控制器TestController.class.php 2.创建操作方法 namespace Home\Controller; use Think\Controller; class TestController extends Controller { public function yanzheng(){ $this->show();//显示模版页面 } }   3.在Home/View/Test下新建验证的模版页 yanzheng.html

阿里大于验证码发送 (ThinkPhp框架)

1.登录平台 阿里大于 2.登陆之后我们可以看到资费,使用场景等,在进入正题之前我们需要一些准备工作,首先我们先了解下短信的请求参数,在这里我们需要注意的是sms_param这个参数,在接下来我们申请短信模板的时候会用到 3.相应参数,对待返回值我们记住最基本的true or false 即可 4.了解完公共参数,接下来我们进入正题,首先我们得配置短信签名和配置短信模板,短信签名出现在短信开头,注意短信模板,这里将用到上文提示的sms_param参数 5.同时,在其网站上下载好SDK,下图展示的

【ThinkPHP框架学习 】(1) --- thinkphp 3.2.3 验证码验证使用教程分享

框架版本:ThinkPHP框架     thinkphp 3.2.3 生成验证码 下面是最简单的方式生成验证码: $Verify = new \Think\Verify(); $Verify->entry(); 1.验证码调用与验证码配置参数,如下图:控制器处代码 2.模板处调用验证码代码如下图: 3.在admin/Common/function.php下:   在后台共用函数文件处  加入下面的验证码验证函数代码    验证函数 4.用户输入了验证码   传入到控制器验证代码:验证代码 5.小

ThinkPHP框架快速开发网站

使用ThinkPHP框架快速搭建网站 这一周一直忙于做实验室的网站,基本功能算是完成了.比较有收获的是大概了解了ThinkPHP框架.写一些东西留作纪念吧.如果对于同样是Web方面新手的你有一丝丝帮助,那就更好了挖. 以前用PHP做过一个很蹩脚的网站,为什么这么说呢,因为写的全是死代码.做完以后觉得实在是累,前端要div+css,js 后端要php,mysql,这么多东西要弄,十分头疼.所以,在接到做网站的任务后,我第一时间想到一定要使用开发框架去做,绝不能跟以前一样那么累了. 我选择的是PHP

PHP--TP框架----生成验证码的方式

TP框架----生成验证码的方式 xianshi.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <

使用ThinkPHP框架高速开发站点(多图)

使用ThinkPHP框架高速搭建站点 这一周一直忙于做实验室的站点,基本功能算是完毕了.比較有收获的是大概了解了ThinkPHP框架.写一些东西留作纪念吧.假设对于相同是Web方面新手的你有一丝丝帮助,那就更好了挖. 曾经用PHP做过一个非常蹩脚的站点,为什么这么说呢,由于写的全是死代码.做完以后认为实在是累,前端要div+css,js 后端要php,mysql,这么多东西要弄,十分头疼.所以,在接到做站点的任务后,我第一时间想到一定要使用开发框架去做,绝不能跟曾经一样那么累了. 我选择的是PH

使用ThinkPHP框架高速发展网站(多图)

使用ThinkPHP框架高速搭建站点 这一周一直忙于做实验室的站点,基本功能算是完毕了.比較有收获的是大概了解了ThinkPHP框架.写一些东西留作纪念吧.假设对于相同是Web方面新手的你有一丝丝帮助,那就更好了挖. 曾经用PHP做过一个非常蹩脚的站点,为什么这么说呢,由于写的全是死代码.做完以后认为实在是累,前端要div+css,js 后端要php,mysql,这么多东西要弄,十分头疼.所以,在接到做站点的任务后,我第一时间想到一定要使用开发框架去做,绝不能跟曾经一样那么累了. 我选择的是PH

ThinkPHP 框架模型

本文和大家分享的主要是ThinkPHP 框架模型相关内容,一起来看看吧,希望对大家学习php有所帮助. 1 在MainController.class.php 控制器中有一个test的方法,同时还有一个deng的方法,我想在test方法中使用deng方法 表示为 <?phpnamespace Home\Controller;use Think\Controller;class MainController extends controller{ public function test() {

ThinkPHP框架系统源码解析——URL路由解析

1 一.ThinkPHP框架目录 2 /test/index.php //项目入口文件 3 /ThinkPHP/ThinkPHP.php //框架入口文件 4 5 Common 框架公共文件目录(函数库) 6 ThinkPHP/Common/runtime.php //框架初次运行文件 7 ThinkPHP/Common/common.php //框架基础函数库 8 ThinkPHP/Common/functions.php //标准模式公共函数库 9 10 Conf 框架配置文件目录 11 T