php实现会员功能
实现会员注册功能
创建注册表单页面,包含用户名、密码、邮箱等字段。表单提交后,验证输入数据并存储到数据库。
// 注册处理逻辑示例
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$username = trim($_POST['username']);
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
// 检查用户名是否已存在
$stmt = $pdo->prepare("SELECT id FROM users WHERE username = ?");
$stmt->execute([$username]);
if (!$stmt->fetch()) {
$stmt = $pdo->prepare("INSERT INTO users (username, password, email) VALUES (?, ?, ?)");
$stmt->execute([$username, $password, $email]);
header("Location: login.php");
exit;
} else {
$error = "用户名已存在";
}
}
实现会员登录功能
创建登录表单,验证用户凭据并创建会话。使用password_verify()函数验证密码哈希。
session_start();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$username = $_POST['username'];
$password = $_POST['password'];
$stmt = $pdo->prepare("SELECT id, username, password FROM users WHERE username = ?");
$stmt->execute([$username]);
$user = $stmt->fetch();
if ($user && password_verify($password, $user['password'])) {
$_SESSION['user_id'] = $user['id'];
$_SESSION['username'] = $user['username'];
header("Location: dashboard.php");
exit;
} else {
$error = "用户名或密码错误";
}
}
实现会话管理
登录成功后创建会话,其他页面通过检查会话来验证用户登录状态。

// 检查登录状态的函数
function is_logged_in() {
return isset($_SESSION['user_id']);
}
// 保护页面内容
if (!is_logged_in()) {
header("Location: login.php");
exit;
}
实现密码重置功能
提供密码重置选项,通过电子邮件发送重置链接。重置链接应包含一次性令牌。
// 生成并存储重置令牌
$token = bin2hex(random_bytes(32));
$expires = date('Y-m-d H:i:s', strtotime('+1 hour'));
$stmt = $pdo->prepare("UPDATE users SET reset_token = ?, reset_expires = ? WHERE email = ?");
$stmt->execute([$token, $expires, $email]);
// 发送包含令牌链接的邮件
$resetLink = "https://example.com/reset-password.php?token=$token";
mail($email, "密码重置", "请点击链接重置密码: $resetLink");
实现会员资料管理
允许会员查看和编辑个人资料信息,如用户名、邮箱、头像等。

// 获取当前用户信息
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$_SESSION['user_id']]);
$user = $stmt->fetch();
// 更新资料处理
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$newEmail = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
$stmt = $pdo->prepare("UPDATE users SET email = ? WHERE id = ?");
$stmt->execute([$newEmail, $_SESSION['user_id']]);
$_SESSION['success'] = "资料更新成功";
header("Location: profile.php");
exit;
}
实现会员权限系统
根据会员角色或等级实现不同的访问权限。可以在用户表中添加role字段。
// 检查权限的函数
function has_permission($requiredRole) {
if (!is_logged_in()) return false;
$stmt = $pdo->prepare("SELECT role FROM users WHERE id = ?");
$stmt->execute([$_SESSION['user_id']]);
$userRole = $stmt->fetchColumn();
return $userRole === $requiredRole;
}
// 使用示例
if (!has_permission('admin')) {
header("HTTP/1.0 403 Forbidden");
exit;
}
实现记住登录功能
使用持久性cookie实现"记住我"功能,cookie应包含用户标识和验证令牌。
// 创建记住我cookie
if (isset($_POST['remember'])) {
$selector = bin2hex(random_bytes(8));
$token = bin2hex(random_bytes(32));
$expires = date('Y-m-d H:i:s', strtotime('+30 days'));
$stmt = $pdo->prepare("INSERT INTO auth_tokens (user_id, selector, token, expires) VALUES (?, ?, ?, ?)");
$stmt->execute([$user['id'], $selector, hash('sha256', $token), $expires]);
setcookie('remember', "$selector:$token", time() + 86400 * 30, '/', '', true, true);
}






