首页  >  文章  >  后端开发  >  如何使用PHP实现用户登录验证码功能

如何使用PHP实现用户登录验证码功能

PHPz
PHPz原创
2023-04-21 09:09:332005浏览

随着网络技术的发展,网站的安全问题也越来越受到关注。作为一个网站开发者,我们需要确保用户的账号信息和个人隐私的安全性。其中,用户登录过程的安全性也非常重要。为了保护用户账号的安全,我们需要在用户登录页面添加验证码功能。本篇文章将介绍如何使用 PHP 实现用户登录验证码功能。

  1. 什么是验证码

验证码是一种区分人类和计算机程序的技术,可以有效防止恶意攻击者使用自动化程序对网站发起攻击。常见的验证码有数字、字母、图形等不同形式,用户需要在登录时正确输入验证码,以验证用户的身份。

在网站开发中,验证码通常会嵌入到登录系统中,防止恶意用户通过暴力破解等方式获取系统权限。同时,验证码也可以避免恶意用户使用自动化程序进行攻击和刷数据等行为。

  1. 制作 PHP 验证码

在 PHP 中,可以使用 GD 扩展库绘制各种验证码,包括数字、字母和图形等。下面我们以数字和字母验证码为例,介绍如何在 PHP 中制作验证码。

2.1. 数字验证码生成

数字验证码是制作验证码的最基本形式,也是最常见的一种。可以使用 GD 库中的函数生成数字验证码。下面是一段示例代码,用于生成一个随机的4位数字验证码。

<?php
session_start(); // 开启 session

header(&#39;Content-type: image/png&#39;); // 设置 Content-type

$im = imagecreatetruecolor(80, 40); // 创建一个宽为80,高为40的验证码背景图
$bgColor = imagecolorallocate($im, 255, 255, 255); // 设置背景色为白色
imagefill($im, 0, 0, $bgColor); // 绘制背景

$code = rand(1000, 9999); // 随机生成一个 4 位数的验证码
$_SESSION[&#39;code&#39;] = $code; // 把验证码存储在 Session 中,以便在其他页面中使用

$textColor = imagecolorallocate($im, 0, 0, 0); // 设置验证码颜色

imagestring($im, 5, 20, 12, $code, $textColor); // 绘制验证码

imagepng($im); // 输出 PNG 图片
imagedestroy($im); // 释放内存
?>

解析:

  • 首先,我们开启了 PHP 的 session 功能,以便在其他页面上使用验证码。
  • 然后,我们指定验证码的 MIME 类型为 image/png,告诉浏览器该文件是一个 PNG 图片文件。
  • 接着,我们使用 imagecreatetruecolor 函数创建一个宽为80,高为40的空图像。
  • 然后,我们使用 imagecolorallocate 函数设置了白色的背景,并使用 imagefill 函数填充整个图像。
  • 随后,我们生成一个随机的4位数字验证码,并将其存储在 session 中。
  • 最后,我们使用 imagestring 函数在图像中绘制了验证码,并使用 imagepng 函数输出生成的 PNG 图片,然后销毁图像资源,释放内存。

2.2. 字母数字混合验证码生成

数字验证码容易受到攻击,所以为了提高安全性,我们可以使用字母数字混合的验证码形式。同样地,我们可以使用 PHP 的 GD 库绘制字母数字验证码。下面是一段示例代码,用于生成一个随机的4位字母数字混合验证码。

<?php
session_start(); // 开启 session

header(&#39;Content-type: image/png&#39;); // 设置 Content-type

$im = imagecreatetruecolor(100, 40); // 创建一个宽为100,高为40的验证码背景图
$bgColor = imagecolorallocate($im, 255, 255, 255); // 设置背景色为白色
imagefill($im, 0, 0, $bgColor); // 绘制背景

// 字母数字集
$chars = &#39;0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ&#39;;
$len = strlen($chars);
$code = &#39;&#39;;
for ($i = 0; $i < 4; $i++) {
    $code .= $chars[rand(0, $len-1)];
}

$_SESSION[&#39;code&#39;] = $code; // 把验证码存储在 Session 中,以便在其他页面中使用

$textColor = imagecolorallocate($im, 0, 0, 0); // 设置验证码颜色

// 使用随机字体和位置,绘制验证码
for ($i = 0; $i < 4; $i++) {
    $font = rand(1, 5); // 随机选择字体
    $angle = rand(-20, 20); // 随机旋转角度
    $x = $i * 20 + rand(0, 10); // 规定较小的x坐标值和x步进值,y的值也可以自定义 
    $y = rand(20, 30);
    $fontColor = imagecolorallocate($im, rand(0, 255), rand(0, 255), rand(0, 255));
    $char = substr($code, $i, 1);
    imagettftext($im, 18, $angle, $x, $y, $fontColor, __DIR__.&#39;/font&#39;.$font.&#39;.ttf&#39;, $char);
}

imagepng($im); // 输出 PNG 图片
imagedestroy($im); // 释放内存
?>

解析:

  • 与数字验证码的生成方式不同,字母数字混合验证码需要先定义一个由数字和字母组成的集合 chars,然后从中随机获取字符。
  • 然后,我们使用同样的方式将验证码存储在 session 中。
  • 字符的绘制与数字验证码基本相同,但是需要引入 ttf 字体文件来生成字母。我们随机选择一个字体和绘制位置,并使用 imagettftext 函数绘制字符。
  1. 在网站中使用验证码

生成验证码之后,只需要在用户登录页中引入生成验证码的程序即可。在验证用户输入账号和密码信息的同时,还需要验证用户输入的验证码是否正确。

下面是一个用户登录页面的示例代码。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>
    <form action="login.php" method="post">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username"><br>

        <label for="password">Password:</label>
        <input type="password" id="password" name="password"><br>

        <label for="code">Code:</label>
        <input type="text" id="code" name="code"><br>
        <img src="captcha.php" alt="Captcha">

        <button type="submit">Submit</button>
    </form>
</body>
</html>

与普通的用户登录页面类似,我们在输入账号和密码的同时添加了验证码部分,并引入验证码的生成程序 captcha.php。用户输入完账号、密码和验证码后,点击提交按钮,系统将提交用户输入的信息到 login.php 中进行验证。

下面是 login.php 中的代码,用于验证用户输入的账号、密码和验证码信息是否正确。

<?php
session_start();

$username = $_POST[&#39;username&#39;];
$password = $_POST[&#39;password&#39;];
$code = $_POST[&#39;code&#39;];

// 验证用户输入的验证码是否正确
if (strtolower($code) !== strtolower($_SESSION[&#39;code&#39;])) {
    echo &#39;Invalid Code.&#39;;
    exit;
}

// 验证用户输入的账号和密码是否正确
if ($username === &#39;admin&#39; && $password === &#39;admin&#39;) {
    echo &#39;Login Successfully.&#39;;
} else {
    echo &#39;Invalid Username or Password.&#39;;
}
?>

在 login.php 中,我们首先验证用户输入的验证码是否正确。如果验证码不匹配,则提示用户输入的验证码无效,退出登录验证。否则,我们验证用户输入的账号和密码信息是否正确。如果正确,提示用户登录成功,否则提示用户名或密码无效。

  1. 总结

本篇文章介绍了如何使用 PHP 和 GD 库生成数字和字母数字混合验证码,并在网站中使用验证码来保证用户登录信息的安全性。通过本文的学习,你已经了解了如何防止恶意用户使用自动化程序攻击你的网站,并保护了网站用户的账号和个人隐私安全。

以上是如何使用PHP实现用户登录验证码功能的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn