验证码刷新必须同步更新图片和session值,即“换值+换图”;前端仅替换img src并保留输入内容;校验时需比对captcha_id防重放;中文显示需正确设置字体路径与编码。
验证码图片刷新时如何避免 session 错乱
PHP 验证码图片刷新如果只重绘图像而不更新 session 中的验证码值,用户输入永远校验失败。关键不是“换图”,而是“换值+换图”同步进行。
常见错误是前端点击刷新按钮只请求 captcha.php,但后端没在生成新图的同时调用 $_SESSION['captcha'] = $new_code,导致 session 里还是旧值。
- 每次生成图片前,必须先生成新随机码,并立即写入
$_SESSION['captcha'] - 确保
session_start()在脚本最开头(且无任何输出),否则 session 写入失败 - 不要在验证码生成脚本里做
exit或die之前跳过 session 赋值 - 若使用 GD 绘图,
imagepng()后记得imagedestroy(),避免内存泄漏影响后续请求
前端点击刷新按钮如何不丢失用户已输内容
单纯用 刷新会清空 input 框——这不是验证码逻辑问题,而是 DOM 行为失控。
正确做法是:刷新图片时,保留用户已输入的验证码文本,仅替换 的 src,并重置校验状态(如移除 success/error class)。
立即学习“PHP免费学习笔记(深入)”;