详解ThinkPHP3.2.3验证码显示、刷新、校验

发布时间 - 2026-01-10 22:11:42    点击率:

ThinkPHP3.2.3验证码显示、刷新、校验 ,具体如下:

显示验证码

首先在Home/Controller下创建一个公共控制器PublicController

<?php
namespace Home\Controller;

use Think\Controller;
use Think\Verify;

class PublicController extends Controller
{

  /* 生成验证码 */
  public function verify()
  {
    $config = [
      'fontSize' => 19, // 验证码字体大小
      'length' => 4, // 验证码位数
      'imageH' => 34
    ];
    $Verify = new Verify($config);
    $Verify->entry();
  }

  /* 验证码校验 */
  public function check_verify($code, $id = '')
  {
    $verify = new \Think\Verify();
    $res = $verify->check($code, $id);
    $this->ajaxReturn($res, 'json');
  }
}

verify函数用于生成验证码,config是用来配置显示验证码的属性。该属性有哪些可配置项,可以查看Thinkphp/Library/Think/Verify.class.php文件,此处不再赘述。

check_verify函数用于校验验证码的正确性。模板post用户填写的验证码到该函数,返回$res==true验证通过false验证失败。
前台模板页建立index.html

 <div class="">
 <label for="j_verify" class="t">验证码:</label> <input id="j_verify"
 name="j_verify" type="text" class="form-control x in">
 <img id="verify_img" alt="点击更换" title="点击更换"
 src="{:U('public/verify',array())}" class="m">
 </div>

使用Thinkphp的U方法形成生成验证码的图片。

点击刷新验证码

从上面产生验证码的链接我们可以看出,域名/public/verify即可产生验证码。Thinkphp的验证码生成机制是,如若我们需要产生新的验证码,在该链接后加入一个变量值即可。

我们可以考虑实现public/verify/变量值的形式URL。

$("#verify_img").click(function() {
  var verifyURL = "public/verify";
  var time = new Date().getTime();
  $("#verify_img").attr({
   "src" : verifyURL + "/" + time
  });
});

利用JS获取当前时间戳加入到URL之后即可。

到此我们即可实现验证码的点击刷新功能。具体表现形式,自己随意哈。

异步校验验证码

大家一定见过在某些网站,我们输入验证码的时候,输入的过程中文本框后面一直显示错误,直到我们输入争取的时候会先提示验证码正确的形式。下面代码就可以实现:

$("#j_verify").keyup(function() {
  $.post("public/check_verify", {
    code : $("#j_verify").val()
    }, function(data) {
    if (data == true) {
      //验证码输入正确
    } else {
      //验证码输入错误
    }
  });
});

利用onekeyup。原理就不需要多讲了吧!

这样我们就可以实现在提交用户名密码之前先进行一次验证码校验,之后表单提交之后再进行一次校验,提升用户体验啦!

还没结束:

当我们采取以上形式实现验证码两次校验的时候,肯定会出现第一次异步校验成功,但是提交表单却提示验证码错误的情况!其实原因还是出在Thinkphp的Verify.class.php上:

以下是该类初始的config配置:

protected $config =  array(
    'seKey'   => 'ThinkPHP.CN',  // 验证码加密密钥
    'codeSet'  => '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY',       // 验证码字符集合
    'expire'  => 1800,      // 验证码过期时间(s)
    'useZh'   => false,      // 使用中文验证码 
    'zhSet'   => '……此处不粘贴了,太多了!',       // 中文验证码字符串
    'useImgBg' => false,      // 使用背景图片 
    'fontSize' => 25,       // 验证码字体大小(px)
    'useCurve' => false,      // 是否画混淆曲线
    'useNoise' => false,      // 是否添加杂点  
    'imageH'  => 0,        // 验证码图片高度
    'imageW'  => 0,        // 验证码图片宽度
    'length'  => 5,        // 验证码位数
    'fontttf'  => '',       // 验证码字体,不设置随机获取
    'bg'    => array(243, 251, 254), // 背景颜色
    'reset'   => true,      // 验证成功后是否重置
    );

请大家注意最后一个属性reset 表示的是验证成功后是否重置验证码。相信大家都明白了吧,我们进行第一次校验通过之后,其实该验证码已经失效了,只不过因为我们采取的是异步校验,页面并没有刷新,导致了第二次申请校验的时候和系统产生的已经是不相同的了。所以如果大家喜欢这种两次校验的风格,可以考虑将reset配置为false即可。

好了,基于Thinkphp3.2.3的验证码问题今天就总结到这了。只是大概说了一下实现方法,具体内容还请大家参考TP官方手册。如有错误之处,欢迎大家指出。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# thinkphp  # 验证码刷新  # 验证码  # thinkphp3.2  # ThinkPHP5.1验证码功能实现的示例代码  # ThinkPHP5&5.1实现验证码的生成、使用及点击刷新功能示例  # thinkphp5.1验证码及验证码验证功能的实现详解  # tp5(thinkPHP5框架)captcha验证码配置及验证操作示例  # thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法  # thinkPHP框架实现的短信接口验证码功能示例  # thinkPHP实现的验证码登录功能示例  # thinkPHP中验证码的简单实现方法  # thinkphp自带验证码全面解析  # Thinkphp极验滑动验证码实现步骤解析  # 的是  # 两次  # 表单  # 就可以  # 好了  # 还没  # 变量值  # 大家都  # 说了  # 如有  # 之处  # 见过  # 请大家  # 我们可以  # 欢迎大家  # 要多  # 可以看出  # 当我们  # 不需 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: WordPress 子目录安装中正确处理脚本路径的完整指南  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  Laravel如何使用Gate和Policy进行授权?(权限控制)  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  做企业网站制作流程,企业网站制作基本流程有哪些?  如何用花生壳三步快速搭建专属网站?  🚀拖拽式CMS建站能否实现高效与个性化并存?  如何续费美橙建站之星域名及服务?  Python面向对象测试方法_mock解析【教程】  JavaScript如何实现路由_前端路由原理是什么  微信小程序 wx.uploadFile无法上传解决办法  如何快速建站并高效导出源代码?  如何快速搭建个人网站并优化SEO?  JavaScript Ajax实现异步通信  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  如何快速使用云服务器搭建个人网站?  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  Linux后台任务运行方法_nohup与&使用技巧【技巧】  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  如何在IIS管理器中快速创建并配置网站?  个人网站制作流程图片大全,个人网站如何注销?  如何为不同团队 ID 动态生成多个非值班状态按钮  Laravel如何使用Service Container和依赖注入?(代码示例)  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  Thinkphp 中 distinct 的用法解析  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  Java垃圾回收器的方法和原理总结  长沙做网站要多少钱,长沙国安网络怎么样?  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  如何快速搭建高效服务器建站系统?  如何在不使用负向后查找的情况下匹配特定条件前的换行符  java获取注册ip实例  Laravel如何升级到最新版本?(升级指南和步骤)  成都网站制作公司哪家好,四川省职工服务网是做什么用?  如何在宝塔面板创建新站点?  Linux系统命令中tree命令详解  Laravel怎么上传文件_Laravel图片上传及存储配置  java ZXing生成二维码及条码实例分享  java中使用zxing批量生成二维码立牌  如何在云服务器上快速搭建个人网站?  iOS发送验证码倒计时应用  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  Laravel API资源类怎么用_Laravel API Resource数据转换  如何在万网自助建站中设置域名及备案?  laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全