系统架构
系统采用前后端分离的架构,使用PHP作为后端语言,MySQL作为数据库。以下是系统的整体架构图:
这个架构图展示了系统的三个主要层次:
- 前端界面层:包含用户交互的三个页面(注册、登录和欢迎页面)
- 后端服务层:处理用户请求的PHP处理器和管理用户会话的组件
- 数据库层:使用MySQL存储用户信息
当用户进行注册或登录操作时,数据会从前端界面传递到PHP处理器,经过验证后存储到MySQL数据库中。会话管理确保用户登录状态的维护,成功登录后显示欢迎页面。
数据库设计
首先,我们需要创建一个存储用户信息的数据库表。以下是表结构:
CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(50) NOT NULL,email VARCHAR(100) NOT NULL,password VARCHAR(255) NOT NULL,UNIQUE KEY (email)
);
后端实现
- 数据库连接文件(
db.php
):
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "user_system";// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);// 检查连接
if ($conn->connect_error) {die("连接失败: " . $conn->connect_error);
}
?>
- 注册页面(
register.php
):
<?php
session_start();
include 'db.php';if ($_SERVER["REQUEST_METHOD"] == "POST") {$username = $_POST['username'];$email = $_POST['email'];$password = $_POST['password'];// 检查邮箱是否已存在$stmt = $conn->prepare("SELECT email FROM users WHERE email = ?");$stmt->bind_param("s", $email);$stmt->execute();$stmt->store_result();if ($stmt->num_rows > 0) {$error = "该邮箱已被使用";} else {// 插入新用户$stmt = $conn->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");$stmt->bind_param("sss", $username, $email, $password);if ($stmt->execute()) {header("Location: login.php");exit();} else {$error = "注册失败,请重试";}}$stmt->close();
}
?>
- 登录页面(
login.php
):
<?php
session_start();
include 'db.php';if ($_SERVER["REQUEST_METHOD"] == "POST") {$email = $_POST['email'];$password = $_POST['password'];$stmt = $conn->prepare("SELECT id, username FROM users WHERE email = ? AND password = ?");$stmt->bind_param("ss", $email, $password);$stmt->execute();$result = $stmt->get_result();if ($result->num_rows == 1) {$user = $result->fetch_assoc();$_SESSION['user_id'] = $user['id'];$_SESSION['username'] = $user['username'];header("Location: welcome.php");exit();} else {$error = "邮箱或密码错误";}$stmt->close();
}
?>
- 欢迎页面(
welcome.php
):
<?php
session_start();
include 'db.php';if (!isset($_SESSION['user_id'])) {header("Location: login.php");exit();
}$username = $_SESSION['username'];
?>
HTML界面
- 注册页面HTML:
<!DOCTYPE html>
<html>
<head><title>用户注册</title><style>.container {width: 300px;margin: 50px auto;padding: 20px;border: 1px solid #ccc;}.error {color: red;margin-bottom: 10px;}</style>
</head>
<body><div class="container"><h2>用户注册</h2><?php if(isset($error)): ?><div class="error"><?php echo $error; ?></div><?php endif; ?><form action="" method="post"><div><label>用户名:</label><input type="text" name="username" required></div><div><label>邮箱:</label><input type="email" name="email" required></div><div><label>密码:</label><input type="password" name="password" required></div><button type="submit">注册</button></form><p>已有账号?<a href="login.php">登录</a></p></div>
</body>
</html>
- 登录页面HTML:
<!DOCTYPE html>
<html>
<head><title>用户登录</title><style>.container {width: 300px;margin: 50px auto;padding: 20px;border: 1px solid #ccc;}.error {color: red;margin-bottom: 10px;}</style>
</head>
<body><div class="container"><h2>用户登录</h2><?php if(isset($error)): ?><div class="error"><?php echo $error; ?></div><?php endif; ?><form action="" method="post"><div><label>邮箱:</label><input type="email" name="email" required></div><div><label>密码:</label><input type="password" name="password" required></div><button type="submit">登录</button></form><p>没有账号?<a href="register.php">注册</a></p></div>
</body>
</html>
- 欢迎页面HTML:
<!DOCTYPE html>
<html>
<head><title>欢迎页面</title>
</head>
<body><div style="text-align: center; margin-top: 50px;"><h2>欢迎您,<?php echo htmlspecialchars($username); ?>!</h2><p><a href="logout.php">退出登录</a></p></div>
</body>
</html>
安全考虑
1.密码安全:
- 在生产环境中,应该使用
password_hash()
和password_verify()
处理密码 - 永远不要以明文存储密码
2.SQL注入防护:
- 使用预备语句(prepared statements)防止SQL注入
- 所有用户输入都要经过验证和过滤
3.会话安全:
- 使用
session_regenerate_id()
防止会话固定攻击 - 设置适当的会话超时时间
4.XSS防护:
- 使用
htmlspecialchars()
输出用户数据 - 设置适当的Content-Security-Policy
部署步骤
- 安装MySQL数据库
- 创建数据库和表结构
- 配置PHP环境
- 上传所有PHP文件到服务器
- 修改
db.php
中的数据库连接配置 - 测试所有功能