php实现 用户
PHP 用户系统实现
数据库设计
创建用户表存储用户信息,基本字段包括用户ID、用户名、密码(加密)、邮箱、注册时间等。使用MySQL示例:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
用户注册功能
处理用户提交的表单数据,验证后存入数据库。密码使用password_hash()加密:
$username = $_POST['username'];
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$email = $_POST['email'];
$stmt = $pdo->prepare("INSERT INTO users (username, password, email) VALUES (?, ?, ?)");
$stmt->execute([$username, $password, $email]);
用户登录功能
验证用户凭证,使用password_verify()比对密码:

$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$_POST['username']]);
$user = $stmt->fetch();
if ($user && password_verify($_POST['password'], $user['password'])) {
$_SESSION['user_id'] = $user['id'];
// 登录成功
}
会话管理
使用PHP内置session机制管理用户登录状态:
session_start();
// 检查登录状态
function isLoggedIn() {
return isset($_SESSION['user_id']);
}
// 登出功能
function logout() {
session_destroy();
}
密码重置
实现密码重置功能需要邮件发送和令牌验证:

// 生成重置令牌
$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, $_POST['email']]);
// 发送含重置链接的邮件
$resetLink = "https://example.com/reset-password?token=$token";
安全措施
- 使用预处理语句防止SQL注入
- 密码哈希存储
- CSRF保护
- 输入验证和过滤
- 登录尝试限制
用户资料管理
提供用户信息修改界面,允许更新基本信息:
$stmt = $pdo->prepare("UPDATE users SET email = ?, bio = ? WHERE id = ?");
$stmt->execute([$_POST['email'], $_POST['bio'], $_SESSION['user_id']]);
权限控制
实现基于角色的访问控制(RBAC):
// 检查用户角色
function hasPermission($requiredRole) {
$stmt = $pdo->prepare("SELECT role FROM users WHERE id = ?");
$stmt->execute([$_SESSION['user_id']]);
$userRole = $stmt->fetchColumn();
return $userRole === $requiredRole;
}






