ThinkPHP 验证码需五步:安装think-captcha扩展、启用Session中间件、配置captcha.php、控制器生成验证码接口、POST时调用captcha_check校验;缺一则不显示或校验失败。

ThinkPHP 验证码不是默认开启的功能,必须手动安装扩展、启用 Session、配置参数、生成图像、校验输入——五步缺一不可。跳过任意一步,都会出现“验证码不显示”或“始终校验失败”的问题。
1. 安装 think-captcha 扩展包
根据你的 ThinkPHP 版本执行对应命令:
- ThinkPHP 6 或 8:运行 composer require topthink/think-captcha
- ThinkPHP 5.1:运行 composer require topthink/think-captcha=2.*
- ThinkPHP 5.0:运行 composer require topthink/think-captcha=1.*
安装完成后检查 vendor/topthink/think-captcha 目录是否存在;若提示 GD 扩展未启用,请确认 php.ini 中已开启 extension=gd 并重启 Web 服务。
2. 启用 Session 中间件(关键!)
验证码依赖 Session 存原始值,TP6/TP8 默认禁用,必须手动打开:
立即学习“PHP免费学习笔记(深入)”;
- 编辑 app/middleware.php
- 取消注释这一行:\think\middleware\SessionInit::class
验证是否生效:在控制器中写 session('test', 'ok'); var_dump(session('test'));,输出 "ok" 即成功。
3. 配置与生成验证码
在 config/ 目录下新建 captcha.php,写入基础配置:
return [
'length' => 4,
'expire' => 1800,
'useNoise' => true,
'useCurve' => true,
'fontSize' => 25,
'imageW' => 130,
'imageH' => 50
];
在控制器中添加方法(如 Index.php):
public function captcha()
{
return \think\captcha\facade\Captcha::create();
}
模板中用以下方式展示(自动带刷新):
<img src="{:url('index/captcha')}" alt="验证码" onclick="this.src='{:url('index/captcha')}?'+Math.random()" />
4. 校验用户输入
在接收表单的 POST 方法中调用校验(例如登录处理):
- 先对输入做 trim:$code = trim($this->request->post('code'));
- 再校验:if (!captcha_check($code)) { $this->error('验证码错误'); }
注意:验证码默认区分大小写、一次性有效;若页面 JS 重复提交或刷新后重试旧值,必然失败。



















