用PHP实现验证码功能

下面是用PHP实现验证码功能的完整攻略,包含两条示例说明:

1. 什么是验证码

验证码(CAPTCHA,全称"Completely Automated Public Turing test to tell Computers and Humans Apart")是一种通过人类轻松识别,但计算机难以识别的图像或文字,用于区分人类和计算机自动化程序的测试。

2. 如何使用PHP实现验证码功能

使用PHP开发验证码功能主要分为以下几个步骤:

2.1 生成验证码图片

使用PHP中的GD库生成一个验证码图片,可以使用如下代码实现:

// 创建图像资源
$image = imagecreatetruecolor(100, 40);

// 设置背景色
$bgcolor = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bgcolor);

// 生成4位随机验证码
$code = '';
for ($i = 0; $i < 4; $i++) {
    $fontcolor = imagecolorallocate($image, mt_rand(0, 125), mt_rand(0, 125), mt_rand(0, 125));
    $fontsize = 20; // 字体大小
    $fontcontent = mt_rand(0, 9); // 字符内容
    $code .= $fontcontent;
    $x = ($i * 100 / 4) + mt_rand(5, 10); // 字符位置X轴
    $y = mt_rand(5, 10); // 字符位置Y轴
    imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
}

// 添加干扰线
for ($i = 0; $i < 6; $i++) {
    $linecolor = imagecolorallocate($image, mt_rand(0, 125), mt_rand(0, 125), mt_rand(0, 125));
    imageline($image, mt_rand(0, 100), mt_rand(0, 40), mt_rand(0, 100), mt_rand(0, 40), $linecolor);
}

// 添加干扰点
for ($i = 0; $i < 100; $i++) {
    $pointcolor = imagecolorallocate($image, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
    imagesetpixel($image, mt_rand(0, 100), mt_rand(0, 40), $pointcolor);
}

// 输出图像
header('content-type:image/png');
imagepng($image);

// 释放资源
imagedestroy($image);

2.2 将验证码存入session中

在生成验证码图片的代码中,我们已经获得了验证码字符串,我们可以将其保存到session中,以便后续验证操作的使用。示例代码如下:

session_start();
$_SESSION['code'] = $code; // $code为上一步中生成的验证码字符串

2.3 验证输入的验证码是否正确

在提交表单时,我们需要验证用户输入的验证码是否正确,示例代码如下:

session_start();
if (!empty($_POST['code']) && strtolower($_POST['code']) === strtolower($_SESSION['code'])) {
    // 验证通过,执行相应的操作
} else {
    // 验证失败,给出相应提示
}

示例一:在登录页面中嵌入验证码功能

在登录页面中增加验证码功能,可以避免恶意攻击者通过暴力猜测密码等手段进行非法登录。登录页面示例代码如下:

<form method="post" action="login.php">
    <p>用户名:<input type="text" name="username"></p>
    <p>密码:<input type="password" name="password"></p>
    <p>验证码:<input type="text" name="code" maxlength="4"><img src="code.php" onclick="this.src='code.php?'+Math.random()" align="absmiddle"></p>
    <p><input type="submit" value="登录"></p>
</form>

在表单中增加了一个验证码输入框,及一个验证码图片,通过javascript的Math.random()函数可以动态刷新验证码图片,避免重复暴力破解。

示例二:限制发邮件

在网站中一个常见的场景是限制非法用户恶意注册或向网站的用户大规模发送垃圾邮件或诈骗信件。这时可以使用验证码限制用户的操作。示例代码如下:

<form method="post" action="send_email.php">
    <p>收件人:<input type="text" name="to"></p>
    <p>主题:<input type="text" name="subject"></p>
    <p>内容:<textarea name="content"></textarea></p>
    <p>验证码:<input type="text" name="code" maxlength="4"><img src="code.php" onclick="this.src='code.php?'+Math.random()" align="absmiddle"></p>
    <p><input type="submit" value="发送"></p>
</form>

在表单中增加了一个验证码输入框,及一个验证码图片,用户在发送邮件时需要输入验证码,验证通过以后才能进行发送操作。

以上是两个基本示例,实际开发中的应用还需要根据实际场景制定相应的策略,来保证验证码功能在网站中的应用效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用PHP实现验证码功能 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • python+opencv3.4.0 实现HOG+SVM行人检测的示例代码

    下面我来详细讲解如何使用Python和OpenCV 3.4.0实现HOG+SVM行人检测的示例代码。 1. 安装OpenCV 3.4.0 首先,我们需要安装OpenCV 3.4.0。OpenCV是一个开源的计算机视觉库,可以提供各种图像处理和计算机视觉的功能,包括HOG特征提取和SVM分类器等。我们可以从OpenCV官网下载适合自己系统的安装包,并按照安装说…

    人工智能概览 2023年5月25日
    00
  • Django使用rest_framework写出API

    下面是关于“Django使用rest_framework写出API”的完整攻略。 1. 安装Django和rest_framework 在开始使用Django中的rest_framework库编写API之前,需要安装Django和rest_framework库,我们可以通过以下命令进行安装: pip install django pip install dj…

    人工智能概论 2023年5月25日
    00
  • ASP.NET session.timeout设置案例详解

    ASP.NET Session.Timeout 设置案例详解 什么是 ASP.NET Session.Timeout ASP.NET Session.Timeout 是指在一定的时间段内,如果客户端没有向服务器发送任何请求,那么服务器就会自动销毁客户端的会话信息。 如何设置 ASP.NET Session.Timeout 在 ASP.NET 中,我们可以通过…

    人工智能概论 2023年5月25日
    00
  • 浅谈Django 页面缓存的cache_key是如何生成的

    下面是针对“浅谈Django 页面缓存的cache_key是如何生成的”的完整攻略,希望对您有所帮助: 简介 Django 是一个流行的 Python Web 框架,具有完善的开发文档和强大的社区支持。在 Django 中,缓存机制是提高 Web 性能的重要手段之一,其中页面缓存是应用最为广泛的缓存方式之一,Django 内置了 cache_page 装饰器…

    人工智能概览 2023年5月25日
    00
  • greenbrower用到的function.js代码集合

    GreenBrowser用到的function.js代码集合 简介 GreenBrowser是一款基于Trident引擎开发的极速浏览器,它用到了一些自定义的功能,功能实现依赖于function.js代码集合。这套代码集合实现了一些常用的功能,例如:获取鼠标坐标、从DOM树中查找元素等。本文将介绍GreenBrowser用到的function.js代码集合的…

    人工智能概论 2023年5月24日
    00
  • python小程序基于Jupyter实现天气查询的方法

    下面是关于“python小程序基于Jupyter实现天气查询的方法”的完整攻略。 1. 准备工作 在开始代码之前,我们需要准备以下材料: Python 3.x版本的环境(推荐使用anaconda) Jupyter软件 requests, json, 和 pandas等相关库 2. 获取天气数据 使用requests库与天气API交互以获取天气信息。 这里我们…

    人工智能概论 2023年5月24日
    00
  • perl Socket编程实例代码

    下面是“perl Socket编程实例代码”的完整攻略: 实例说明 本文将介绍如何在perl中使用Socket编程,创建一个简单的服务器和客户端。其中,服务器将会监听一个指定端口,接受客户端的连接请求,并向客户端发送一条欢迎信息;客户端将连接到服务器,接收并显示来自服务器的欢迎信息。同时,我们还将展示如何使用perl的IO::Select模块,使服务器可以同…

    人工智能概论 2023年5月25日
    00
  • 探究数组排序提升Python程序的循环的运行效率的原因

    探究数组排序提升 Python 程序循环的运行效率的原因的攻略如下: 1. 理解排序算法的原理和复杂度 排序算法是计算机科学中常见的一种算法,可以将无序的数据集合按照一定规律进行排列。常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序等等。不同的排序算法其实现原理、时间复杂度和性能表现都有所不同,因此需要根据具体场景选择适合的排序算法。 在排…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部