# PHP登录页面完整代码(包含验证码)
在当今互联网时代,网站的安全性变得日益重要。用户信息的保护、防止机器人恶意注册和登录等问题,是每一个开发者必须考虑的因素。本篇文章将介绍如何使用PHP创建一个安全的登录页面,其中包含验证码功能,以有效防止恶意用户的攻击。
## 一、项目准备
在开始之前,我们需要准备一些基本的环境和工具:
1. **Web服务器**:如Apache或Nginx。
2. **PHP环境**:建议使用PHP 7.0及以上版本。
3. **数据库**:可以使用MySQL或SQLite来存储用户信息。
4. **验证码库**:这里我们使用PHP内置的GD库来生成验证码。
## 二、数据库设计
首先,我们需要建立一个数据库,用于存储用户的信息。假设我们创建一个名为`users`的表,表结构如下:
```sql
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL
);
```
在这里,我们使用了`username`和`password`字段来存储用户的用户名和密码。
## 三、创建登录页面
接下来,我们开始编写登录页面代码。创建一个名为`login.php`的文件,内容如下:
```php
<?php
session_start();
require 'db.php'; // 引入数据库连接文件
// 定义验证码生成函数
function createCaptcha($length = 5) {
$characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
$captcha = '';
for ($i = 0; $i < $length; $i++) {
$captcha .= $characters[rand(0, strlen($characters) - 1)];
}
return $captcha;
}
// 生成验证码并存入session
$_SESSION['captcha'] = createCaptcha();
// 处理登录请求
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = trim($_POST['username']);
$password = trim($_POST['password']);
$captcha = trim($_POST['captcha']);
// 验证验证码
if ($captcha !== $_SESSION['captcha']) {
$error = "验证码错误!";
} else {
// 查询用户信息
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
$stmt->execute(['username' => $username]);
$user = $stmt->fetch();
// 验证密码
if ($user && password_verify($password, $user['password'])) {
$_SESSION['user_id'] = $user['id'];
header("Location: welcome.php");
exit;
} else {
$error = "用户名或密码错误!";
}
}
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>登录</title>
<style>
body { font-family: Arial, sans-serif; }
.container { width: 300px; margin: auto; }
.error { color: red; }
</style>
</head>
<body>
<div class="container">
<h2>用户登录</h2>
<?php if (isset($error)) { echo "<div class='error'>{$error}</div>"; } ?>
<form method="post" action="">
<label for="username">用户名:</label>
<input type="text" name="username" required>
<br>
<label for="password">密码:</label>
<input type="password" name="password" required>
<br>
<label for="captcha">验证码: <?php echo $_SESSION['captcha']; ?></label>
<input type="text" name="captcha" required>
<br>
<input type="submit" value="登录">
</form>
</div>
</body>
</html>
```
### 代码解析
1. **会话管理**:使用`session_start()`启动会话,以便后续存取用户信息和验证码。
2. **验证码生成**:定义`createCaptcha()`函数生成随机字符串作为验证码,并将其存储在会话中。
3. **表单处理**:通过`$_SERVER["REQUEST_METHOD"]`判断用户是否提交了表单,若是则获取用户名、密码和验证码进行验证。
4. **用户验证**:先查询数据库中的用户信息,再使用`password_verify()`函数验证密码的正确性。
5. **错误处理**:登录失败时,通过设置错误信息向用户反馈。
6. **HTML输出**:通过嵌入PHP代码输出表单和错误信息。
## 四、数据库连接(db.php)
为了能够与数据库进行交互,需要建立一个数据库连接文件`db.php`,内容如下:
```php
<?php
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8';
$username = 'root';
$password = '';
try {
$pdo = new PDO($dsn, $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die('数据库连接失败: ' . $e->getMessage());
}
?>
```
确保根据你的数据库配置调整上述代码中的数据库名称、用户名和密码。
## 五、总结
本文介绍了如何用PHP实现一个简单的登录页面,并为其添加验证码功能。通过使用验证码,我们可以有效提高系统的安全性,防止恶意用户进行暴力破解。此示例仅为基础实现,实际应用中,可以进一步优化,如使用HTTPS加密传输、完善用户输入验证、实现“记住我”功能等。
希望这篇文章能够帮助你理解如何构建一个安全的登录系统,并为你自己的项目提供参考。如果你有任何疑问或需要进一步的帮助,请随时联系我! |