PHP实战开发26-使用PHP生成图片验证码并进行校验

文章目录

  • 一、前言
  • 二、什么是验证码?
  • 三、PHP生成验证码图像
    • 3.1 生成验证码文字
    • 3.2 创建图像并绘制验证码文字
    • 3.3 将验证码存储到Session中
  • 四、前端使用jQuery验证输入
    • 4.1 步骤一:创建HTML结构和CSS样式
    • 4.2 使用jQuery发送AJAX请求进行校验
    • 4.3 步骤三:服务器端校验验证码
  • 五、总结


一、前言

本文已收录于PHP全栈系列专栏:PHP快速入门与实战

在现代互联网应用中,为了防止恶意操作和机器人攻击,常常会使用图片验证码来验证用户的身份。本文将介绍如何使用PHP语言生成图片验证码,并结合前端的jQuery框架实现验证码的输入校验。

二、什么是验证码?

验证码(CAPTCHA)是一种区分计算机程序和人类用户的图灵测试,常用于防止恶意操作和网络爬虫。一般来说,验证码通常由一个随机字符组成的图片和一个输入框组成。用户需要正确地将图片中的字符输入到输入框中,才能通过验证。

在这里插入图片描述

三、PHP生成验证码图像

3.1 生成验证码文字

首先,我们需要生成一个随机的包含数字和字母的字符串作为验证码文字。可以使用以下代码实现:

function generateCode($length) {$chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';$code = '';for ($i = 0; $i < $length; $i++) {$code .= $chars[rand(0, strlen($chars) - 1)];}return $code;
}

3.2 创建图像并绘制验证码文字

接下来,我们使用PHP的GD库创建一个空白的图像,并在图像上绘制验证码文字。可以使用以下代码实现:

$code = generateCode(6); // 生成长度为6的验证码文字$width = 120; // 图像宽度
$height = 40; // 图像高度$image = imagecreate($width, $height); // 创建一个空白的图像$background_color = imagecolorallocate($image, 255, 255, 255); // 设置背景色为白色
$text_color = imagecolorallocate($image, 0, 0, 0); // 设置文字颜色为黑色// 在图像上绘制验证码文字
imagettftext($image, 20, 0, 10, 30, $text_color, 'path/to/font.ttf', $code);header('Content-Type: image/png'); // 设置响应头为PNG图片类型
imagepng($image); // 输出图像
imagedestroy($image); // 销毁图像资源

3.3 将验证码存储到Session中

为了校验用户输入的验证码,我们需要将生成的验证码存储到服务器的Session中。可以使用以下代码实现:

session_start(); // 启动Session$_SESSION['captcha'] = $code; // 存储验证码

至此,我们已经成功地生成了一张带有验证码文字的图片,并将验证码存储到了Session中。

四、前端使用jQuery验证输入

在前端页面中,我们需要使用jQuery来验证用户输入的验证码是否正确。

4.1 步骤一:创建HTML结构和CSS样式

首先,我们需要在HTML页面中创建验证码图片和输入框的HTML结构,并为其添加相应的CSS样式。可以使用以下代码实现:

<!DOCTYPE html>
<html>
<head><title>验证码验证示例</title><style>.captcha-img {display: inline-block;margin-bottom: 10px;}.captcha-input {width: 200px;height: 30px;}.captcha-message {color: red;}</style>
</head>
<body><div class="captcha-container"><img src="generate_captcha.php" alt="验证码" class="captcha-img" /><input type="text" name="captcha" class="captcha-input" /><span class="captcha-message"></span></div><button type="button" id="verify-btn">验证</button><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script><script src="verify_captcha.js"></script>
</body>
</html>

4.2 使用jQuery发送AJAX请求进行校验

我们需要使用jQuery来监听点击验证按钮的事件,并通过AJAX请求将用户输入的验证码发送到服务器进行校验。可以使用以下代码实现:

$(document).ready(function() {$('#verify-btn').click(function() {var captchaValue = $('input[name=captcha]').val();$.ajax({url: 'verify_captcha.php',method: 'POST',data: { captcha: captchaValue },success: function(response) {if (response === 'success') {$('.captcha-message').text('');alert('验证码正确!');} else {$('.captcha-message').text('验证码错误,请重新输入!');}}});});
});

4.3 步骤三:服务器端校验验证码

最后,我们需要在服务器端接收并校验用户输入的验证码。可以使用以下代码实现:

session_start(); // 启动Sessionif ($_SERVER['REQUEST_METHOD'] === 'POST') {$captchaValue = $_POST['captcha'];if (isset($_SESSION['captcha']) && strtoupper($captchaValue) === strtoupper($_SESSION['captcha'])) {echo 'success';} else {echo 'error';}
}

至此,我们已经成功地完成了生成图片验证码并进行校验的功能。

五、总结

本文介绍了如何使用PHP语言生成图片验证码,并结合jQuery实现验证码的输入校验。通过以上步骤,我们可以轻松地在自己的网站中添加验证码功能,提高用户身份验证的安全性。希望本文对您有所帮助!

本文已收录于PHP全栈系列专栏:PHP快速入门与实战 很多精彩内容收录其中,欢迎大家关注。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/16031.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker的联合文件系统 UnionFS《深入docker底层原理》

介绍 docker最大的贡献就是定义了容器镜像的分层的存储格式&#xff0c;docker镜像技术的基础是联合文件系统(UnionFS)&#xff0c;其文件系统是分层的。这样既可以充分利用共享层&#xff0c;又可以减少存储空间占用。 联合挂载系统的工作原理&#xff1a;读&#xff1a;如果…

GPT API+自动化提高生产力

一、简介 一句话说明白&#xff0c;就是自动采集需求&#xff0c;通过GPT API传送给GPT&#xff0c;然后GPT加工后&#xff0c;输出结果&#xff0c;利用自动化工具进行回复/存储/发布&#xff0c;甚至调用手机硬件或者使用WEBHOOK&#xff0c;或者联动IFTTT触发智能硬件的应用…

计算机体系结构基础知识介绍之缓存性能的十大进阶优化之编译器优化和硬件预取(六)

优化七&#xff1a;编译器优化&#xff0c;降低miss率 处理器和主内存之间不断扩大的性能差距促使编译器编写者仔细检查内存层次结构&#xff0c;看看编译时优化是否可以提高性能。再次&#xff0c;研究分为指令缺失的改进和数据缺失的改进。接下来介绍的优化可以在许多现代编…

rocketMq消息队列原生api使用以及rocketMq整合springboot

rocketMq消息队列 文章目录 rocketMq消息队列一、RocketMQ原生API使用1、测试环境搭建2、RocketMQ的编程模型3、RocketMQ的消息样例3.1 基本样例3.2 顺序消息3.3 广播消息3.4 延迟消息3.5 批量消息3.6 过滤消息3.7 事务消息3.8 ACL权限控制 二、SpringBoot整合RocketMQ1、快速实…

某网站JS加密、OB混淆与CSS反爬实战分析

1. 写在前面 最近一段时间接触了一些小说网站的业务。发现很多的小说网站&#xff0c;甚至一些小站它们的安全防护措施做的都很到位&#xff01;例如上次说到的的五秒盾也是存在于一个小说小站。今天要讲的这个网站它集JS加密、ob混淆、CSS反爬于一体 目标站点&#xff1a; aH…

pytest自动化测试实战之执行参数

上一篇介绍了如何运行pytest代码&#xff0c;以及用例的一些执行规则&#xff0c;执行用例发现我们中间print输出的内容&#xff0c;结果没有给我们展示出来&#xff0c;那是因为pytest执行时&#xff0c;后面需要带上一些参数。 参数内容 我们可以在cmd中通过输入 pytest -h…

RuoyiCloudPlus结合SkyWalking-9.4.0 docker部署流程

一、SkyWalking-9.4.0 docker部署流程 docker-compse.yml sky-oap:image: apache/skywalking-oap-server:9.3.0container_name: ruoyi-sky-oapports:- "11800:11800"- "12800:12800"environment:JAVA_OPTS: -Xms1G -Xmx2G#记录数据的有效期&#xff0c;单…

Devops系列四(使用argocd部署java应用到k8s容器)

一、说在前面的话 上文已为我们准备好了以下内容&#xff1a; 制作java应用的docker镜像&#xff0c;并推送至镜像仓库上传helm yaml代码至gitlab仓库&#xff08;此gitlab和java应用所在的gitlab可以独立&#xff0c;也可以在一起&#xff0c;但是不宜在同一个工程&#xff…

Vscosde中写html的速写规则和快捷键

目录 vsCode速写规则! enter 生成html框架ctrl / 注释生成html元素&#xff1a;直接写html&#xff0c;enter直接生成 并且添加内容批量生成> 元素嵌套 同级生成每个元素都有的属性. class # id样式放入css中 link 连接快速使用样式优先级 vsCode速写规则 ! enter 生成h…

PS188——谱瑞(Parade)推动的 Type-C扩展坞红海战略

2020年7月份谱瑞&#xff08;Parade)以3750万美元的价格收购了睿思科技&#xff08;Fresco Logic&#xff09;&#xff0c;对于芯片设计公司来说&#xff0c;并购往往是资本因素考量 >技术因素考量 >市场战略考量。 芯片设计公司的并购&#xff0c;往往更看重的是客户的…

mysql离线安装

MySQL离线安装 进行MySQL离线安装包,当前安装版本为MySQL8.0.32 下载页面&#xff1a;https://downloads.mysql.com/archives/community/ 下载地址&#xff1a;https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.36-1.el7.x86_64.rpm-bundle.tar 将下载完成的安…

梅雨季“霉”烦恼,防潮自救指南请收好

魔都的雨下个不停&#xff0c;天气也异常闷热&#xff0c;原来是上海已经入梅了。“雨连连、湿哒哒、闷兮兮”的梅雨季&#xff0c;湿漉漉的空气&#xff0c;感觉身体也跟着“发霉”。不想做梅雨季最“潮”人&#xff0c;赶紧码住这份抗“霉”攻略。 梅雨季最大的特点是空气湿度…