php mysql实现会员
会员系统实现步骤
数据库设计
创建会员表members,包含字段:id(主键)、username(用户名)、password(密码,需加密)、email(邮箱)、reg_date(注册日期)、last_login(最后登录时间)、status(状态)。
CREATE TABLE members (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
reg_date DATETIME DEFAULT CURRENT_TIMESTAMP,
last_login DATETIME,
status TINYINT DEFAULT 1
);
注册功能实现
处理用户提交的表单数据,验证用户名和邮箱是否已存在,密码使用password_hash加密后存入数据库。
// 注册处理
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = trim($_POST['username']);
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$email = trim($_POST['email']);
// 检查用户名和邮箱是否已存在
$stmt = $pdo->prepare("SELECT id FROM members WHERE username = ? OR email = ?");
$stmt->execute([$username, $email]);
if ($stmt->rowCount() === 0) {
$stmt = $pdo->prepare("INSERT INTO members (username, password, email) VALUES (?, ?, ?)");
$stmt->execute([$username, $password, $email]);
// 注册成功处理
} else {
// 提示用户名或邮箱已存在
}
}
登录功能实现
验证用户提交的登录信息,使用password_verify核对密码,登录成功后更新最后登录时间。
// 登录处理
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = trim($_POST['username']);
$password = $_POST['password'];
$stmt = $pdo->prepare("SELECT * FROM members WHERE username = ?");
$stmt->execute([$username]);
$user = $stmt->fetch();
if ($user && password_verify($password, $user['password'])) {
$_SESSION['user_id'] = $user['id'];
$_SESSION['username'] = $user['username'];
// 更新最后登录时间
$stmt = $pdo->prepare("UPDATE members SET last_login = NOW() WHERE id = ?");
$stmt->execute([$user['id']]);
// 登录成功处理
} else {
// 登录失败处理
}
}
会话管理
使用PHP的session_start()开启会话,检查$_SESSION判断用户登录状态,实现登出功能。
// 检查登录状态
session_start();
if (isset($_SESSION['user_id'])) {
// 用户已登录
}
// 登出处理
if (isset($_GET['logout'])) {
session_destroy();
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 members SET reset_token = ?, reset_expires = ? WHERE email = ?");
$stmt->execute([$token, $expires, $email]);
// 发送包含重置链接的邮件
$resetLink = "https://example.com/reset_password.php?token=$token";
// 发送邮件代码...
安全注意事项
密码存储
必须使用password_hash和password_verify函数处理密码,禁止明文存储。
SQL注入防护 所有数据库查询必须使用预处理语句,禁止直接拼接SQL语句。
CSRF防护 重要操作需添加CSRF令牌验证,防止跨站请求伪造。
会话安全
设置合理的会话过期时间,使用session_regenerate_id防止会话固定攻击。
输入验证 对所有用户输入进行过滤和验证,防止XSS等攻击。
// 示例:过滤用户输入
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);






