aj-captcha 无 php 版本,所谓“像素缓存”实为 slip-offset 偏移阈值(默认5px),php项目需通过http调用其rest接口并共享redis存储验证码数据。

AJ-Captcha 没有 PHP 版本,也不支持“像素缓存”这种说法——这是对配置项 slip-offset 和后端缓存机制的常见误解。
为什么搜不到 “AJ-Captcha PHP 像素缓存”
AJ-Captcha 是 Java 生态的开源项目,官方仅提供 Java 后端(Spring Boot Starter)和多语言前端 SDK(含 HTML/Vue/React/uni-app 等),没有 PHP 后端实现。所谓“像素缓存”,实际是滑动拼图校验时允许的坐标误差容错值,对应配置项 slip-offset,单位是像素,不是缓存策略。
slip-offset 是什么,怎么调
该参数控制滑块验证时服务端比对拖动终点与目标位置的允许偏移量(单位:px),默认为 5。它不涉及 Redis 或任何“缓存”,只是个校验阈值:
- 值设太小(如
1):正常用户轻微手抖就失败,误拒率升高 - 值设太大(如
20):攻击者随便拖一下就可能蒙混过关,安全性下降 - 典型取值范围是
3–8,建议从5开始压测调整 - 修改位置在 Spring Boot 的
application.yml中:aj:<br> captcha:<br> slip-offset: 5
PHP 项目想用 AJ-Captcha?只能走 HTTP 对接
如果你的后端是 PHP,无法直接引入 spring-boot-starter-captcha,但可以复用其标准接口:
- AJ-Captcha 默认暴露 REST 接口,如
/captcha/get(获取验证码)、/captcha/check(校验) - PHP 需用
curl或 Guzzle 调用这些接口,自行处理 session/Redis 共享(例如用同一套 Redis 实例存captchaId和答案) - 关键点:PHP 必须严格透传前端拿到的
captchaId、pointJson(或wordJson)、token等字段,不能擅自解码或改结构 - 注意:AJ-Captcha 的
pointJson坐标默认经 AES 加密(由aes-status: true控制),PHP 端需用相同密钥和算法解密才能校验——官方未提供 PHP 解密工具类,得自己实现或关掉 AES(设aes-status: false)
真正要关心的“缓存”其实是 Redis 配置
AJ-Captcha 依赖 Redis 存储验证码原始答案(如文字点选的正确词序、滑块的目标位置等),这个才是实际影响可用性的缓存层:
- 确保 PHP 和 Java 应用连接的是同一个 Redis 实例(host/port/database/auth)
- 检查 Redis key 过期时间是否合理:AJ-Captcha 默认用
EXPIRE设置 5 分钟,PHP 若提前删 key 或读错 db,会导致captchaId not found错误 - 不要手动清理 Redis 中以
captcha:开头的 key,除非明确知道影响范围 - 若用自建 Redis,确认未开启
maxmemory-policy noeviction以外的淘汰策略,否则高并发下可能被误删
最常被忽略的一点:AJ-Captcha 的“滑块像素精度”完全由前端采集 + 后端 slip-offset 决定,和 PHP 无关;而它依赖的 Redis 缓存,必须与 Java 服务共享且配置一致——这两处出问题,比纠结“PHP 像素缓存”要实在得多。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











