php登录页面完整代码有验证码实现安全验证功能

[复制链接]
30 |0
发表于 2025-5-8 11:45:58 | 显示全部楼层 |阅读模式
# 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加密传输、完善用户输入验证、实现“记住我”功能等。

希望这篇文章能够帮助你理解如何构建一个安全的登录系统,并为你自己的项目提供参考。如果你有任何疑问或需要进一步的帮助,请随时联系我!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表