php验证码需先用gd库生成带干扰线和噪点的120×40图像,绘制4位防混淆字符并倾斜排布;验证码值存入$_session['captcha_code']并记录时间,配合token防重放;5分钟内有效,输出png后销毁资源并exit终止脚本。

在PHP框架中拼接验证码图片并配合Session存储,需要先生成带干扰元素的图像资源,再将校验值存入Session供后续验证使用。
生成带干扰线和噪点的验证码图片
使用GD库创建图像资源,设置背景色后绘制随机线条和像素点增强识别难度。
第一步:调用imagecreatetruecolor(120, 40)创建120×40像素画布,用imagecolorallocate分配白色背景色并填充。
第二步:循环15次,每次用imageline绘制起点和终点均随机的浅灰线条,避免覆盖字符主区域。
第三步:循环80次,在画布内随机位置用imagesetpixel绘制深灰色噪点,防止OCR批量识别。
第四步:生成4位随机字母数字组合(排除易混淆字符O0lI),用imagefttext逐个绘制,每个字符x坐标偏移15~25像素,y坐标上下浮动±5像素模拟手写倾斜。
将验证码值安全存入Session
Session必须在输出任何内容前启动,且验证码值不能明文存储或长期保留。
方法一:调用session_start()后,将生成的验证码字符串赋值给$_SESSION['captcha_code'],并立即设置$_SESSION['captcha_time'] = time()记录生成时间。
方法二:为防暴力重放,可追加一次性token——用bin2hex(random_bytes(16))生成32位随机串,存入$_SESSION['captcha_token'],同时将该token作为隐藏字段传给前端表单。
【验证码Session有效期必须限制在300秒内,超时后需清空对应键值】
输出图片并终止脚本执行
设置HTTP头Content-Type: image/png,调用imagepng($image)直接输出二进制图像流。
销毁图像资源:imagedestroy($image)释放内存。
调用exit;强制终止脚本,防止后续意外输出空白字符污染PNG数据流。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











