PHP 登录验证码页面完整代码
在开发网站时,保护用户隐私和防止自动提交是非常重要的,验证码是一种常用的技术手段,可以有效防止机器人或自动化工具进行恶意操作,本文将详细介绍如何使用PHP编写一个简单的登录验证码页面。
环境准备
首先确保你的服务器已经安装了PHP,并且有一个数据库用于存储用户的登录信息,以下步骤假设你已经在服务器上创建了一个MySQL数据库并初始化了一些表结构。
创建数据库和表
-
创建数据库:
CREATE DATABASE login_system; USE login_system;
-
创建用户表:
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password_hash BINARY(60), email VARCHAR(100) ); -
创建验证码表:
CREATE TABLE verification_codes ( code CHAR(4) PRIMARY KEY, user_id INT, timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) );
编写PHP脚本
接下来我们将编写一个完整的登录验证程序,包括生成验证码、存储验证码及验证输入的验证码等。
<?php
// 初始化session
session_start();
// 验证码长度
$code_length = 4;
// 生成随机验证码
function generate_code($length) {
$chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
$str = '';
for ($i = 0; $i < $length; $i++) {
$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
}
return $str;
}
// 获取验证码
if ($_POST['captcha']) {
$input_captcha = $_POST['captcha'];
} else {
$input_captcha = "";
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">Login with CTA</title>
</head>
<body>
<form action="validate.php" method="post">
<!-- 隐藏域存放验证码 -->
<input type="hidden" name="captcha" value="<?php echo htmlspecialchars($input_captcha); ?>">
<label>Enter Captcha:</label><br>
<input type="text" name="captcha"><br>
<input type="submit" value="Submit">
</form>
<?php
// 检查验证码是否正确
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$stored_captcha = $_SESSION['captcha'] ?? '';
if ($input_captcha === $stored_captcha) {
echo "<p>Captcha is correct.</p>";
// 提交用户名和密码到数据库
$username = $_POST['username'];
$password = $_POST['password'];
// 根据需要修改这里来处理真实的数据库操作
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
$query = "INSERT INTO users (username, password_hash, email) VALUES (?, ?, '')";
$stmt = $pdo->prepare($query);
$result = $stmt->execute([$username, $hashed_password]);
if ($result) {
echo "<p>You have successfully registered!</p>";
} else {
echo "<p>Error registering account!</p>";
}
// 清除验证码缓存
session_unset();
} else {
echo "<p>Captcha is incorrect.</p>";
}
}
?>
</body>
</html>
运行与测试
- 将上述代码保存为
login.html。 - 在本地服务器上运行此文件,通过浏览器访问。
- 使用提供的用户名和密码尝试注册新账户。
- 如果验证码正确,系统会提示成功注册;如果错误,则显示验证码无效的信息。
这个示例提供了一个基本的验证码实现,你可以根据实际需求扩展功能,如增加验证码的复杂度、设置超时时间等。

上一篇