php实现登陆注册
PHP 登录注册实现
数据库准备
创建一个 MySQL 数据库表来存储用户信息,表结构如下:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
注册功能实现
创建注册表单和处理脚本:
register.php
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = trim($_POST['username']);
$email = trim($_POST['email']);
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$conn = new mysqli('localhost', 'username', 'password', 'database');
$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 = "注册失败,请重试";
}
}
?>
<form method="post">
<input type="text" name="username" placeholder="用户名" required>
<input type="email" name="email" placeholder="邮箱" required>
<input type="password" name="password" placeholder="密码" required>
<button type="submit">注册</button>
</form>
登录功能实现
创建登录表单和处理脚本:
login.php
<?php
session_start();
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = trim($_POST['username']);
$password = $_POST['password'];
$conn = new mysqli('localhost', 'username', 'password', 'database');
$stmt = $conn->prepare("SELECT id, username, password FROM users WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();
$result = $stmt->get_result();
if ($user = $result->fetch_assoc()) {
if (password_verify($password, $user['password'])) {
$_SESSION['user_id'] = $user['id'];
$_SESSION['username'] = $user['username'];
header("Location: dashboard.php");
exit();
}
}
$error = "用户名或密码错误";
}
?>
<form method="post">
<input type="text" name="username" placeholder="用户名" required>
<input type="password" name="password" placeholder="密码" required>
<button type="submit">登录</button>
</form>
安全防护措施
使用预处理语句防止SQL注入
$stmt = $conn->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $username, $email, $password);
密码使用bcrypt哈希存储

$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
验证密码时使用password_verify
if (password_verify($password, $user['password'])) {
// 登录成功
}
会话管理
登录成功后创建会话
session_start();
$_SESSION['user_id'] = $user['id'];
$_SESSION['username'] = $user['username'];
登出功能
session_start();
session_destroy();
header("Location: login.php");
exit();
密码重置功能
生成重置令牌并存储

$token = bin2hex(random_bytes(32));
$expires = date("Y-m-d H:i:s", time() + 3600); // 1小时后过期
$stmt = $conn->prepare("UPDATE users SET reset_token=?, reset_expires=? WHERE email=?");
$stmt->bind_param("sss", $token, $expires, $email);
发送包含重置链接的邮件
$resetLink = "https://example.com/reset_password.php?token=$token";
$message = "请点击以下链接重置密码: $resetLink";
mail($email, "密码重置", $message);
输入验证
验证用户名格式
if (!preg_match('/^[a-zA-Z0-9_]+$/', $username)) {
$error = "用户名只能包含字母、数字和下划线";
}
验证邮箱格式
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$error = "无效的邮箱格式";
}
验证密码强度
if (strlen($password) < 8) {
$error = "密码至少需要8个字符";
}






