在开发php系统时,为了提高安全性,我们通常需要添加登录验证码功能,验证码可以有效防止恶意机器人登录和暴力破解密码,php系统登录验证码应该如何实现呢?我将详细介绍如何制作一个简单的验证码功能。
一、生成验证码图片
我们需要生成一个验证码图片,这里,我们可以使用PHP的GD库来实现。
1、创建一个新文件,命名为captcha.php
。
2、编写以下代码,生成一个简单的验证码图片:
<?php session_start(); // 启动会话 // 创建验证码图片 $width = 120; $height = 40; $image = imagecreatetruecolor($width, $height); // 分配颜色 $background_color = imagecolorallocate($image, 255, 255, 255); // 白色背景 imagefill($image, 0, 0, $background_color); // 生成随机验证码 $characters = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ'; $length = 6; $code = ''; for ($i = 0; $i < $length; $i++) { $code .= $characters[mt_rand(0, strlen($characters) - 1)]; } // 将验证码保存到会话中 $_SESSION['captcha'] = $code; // 绘制验证码 $font_color = imagecolorallocate($image, 0, 0, 0); // 黑色字体 imagettftext($image, 20, 0, 10, 30, $font_color, 'arial.ttf', $code); // 添加干扰元素 for ($i = 0; $i < 50; $i++) { imagesetpixel($image, mt_rand(0, $width), mt_rand(0, $height), $font_color); } // 输出图片 header('Content-Type: image/png'); imagepng($image); // 释放内存 imagedestroy($image); ?>
注意:这里需要确保服务器上已安装GD库,并且有字体文件arial.ttf
。
二、在登录表单中显示验证码
我们需要在登录表单中显示验证码图片。
1、创建一个HTML文件,命名为login.html
。
2、在表单中添加以下代码:
<!DOCTYPE html> <html> <head> <title>登录</title> </head> <body> <form action="check_login.php" method="post"> 用户名:<input type="text" name="username" /><br /> 密码:<input type="password" name="password" /><br /> 验证码:<input type="text" name="captcha" /><br /> <img src="captcha.php" alt="验证码" onclick="this.src='captcha.php?'+Math.random();" /><br /> <input type="submit" value="登录" /> </form> </body> </html>
三、验证验证码
我们需要在处理登录请求的文件中验证验证码。
1、创建一个新文件,命名为check_login.php
。
2、编写以下代码,验证验证码和用户名密码:
<?php session_start(); // 启动会话 // 获取用户输入 $username = $_POST['username']; $password = $_POST['password']; $captcha = $_POST['captcha']; // 验证验证码 if (strtolower($captcha) != strtolower($_SESSION['captcha'])) { echo '验证码错误!'; exit; } // 验证用户名和密码(这里仅作示例,实际应查询数据库) if ($username == 'admin' && $password == '123456') { echo '登录成功!'; } else { echo '用户名或密码错误!'; } ?>
至此,一个简单的php系统登录验证码功能就实现了,虽然这个示例比较基础,但它可以为你的系统提供一定的安全保障,在实际应用中,你可以根据需求添加更多功能,如验证码的字符样式、颜色、干扰元素等,希望这个教程对你有所帮助!