php登录功能实现
数据库准备
创建用户表存储登录信息,表结构需包含用户名、密码(需加密)等字段。MySQL示例:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
密码加密处理
使用PHP的password_hash()函数进行加密存储,推荐使用PASSWORD_BCRYPT算法:

$hashedPassword = password_hash($rawPassword, PASSWORD_BCRYPT);
登录表单设计
HTML表单需包含用户名、密码字段及CSRF防护:

<form action="login.php" method="post">
<input type="text" name="username" required>
<input type="password" name="password" required>
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
<button type="submit">登录</button>
</form>
登录验证逻辑
处理表单提交并验证凭据:
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (!hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) {
die('CSRF验证失败');
}
$username = trim($_POST['username']);
$password = $_POST['password'];
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$username]);
$user = $stmt->fetch();
if ($user && password_verify($password, $user['password'])) {
$_SESSION['user_id'] = $user['id'];
header('Location: dashboard.php');
} else {
$error = "用户名或密码错误";
}
}
会话管理
验证成功后建立会话,关键操作需检查会话状态:
// 检查登录状态
function isLoggedIn() {
return isset($_SESSION['user_id']);
}
// 登出功能
function logout() {
session_destroy();
header('Location: login.php');
}
安全增强措施
- 实施登录尝试限制防止暴力破解
- 使用HTTPS传输敏感数据
- 定期更新依赖库防范已知漏洞
- 对用户输入进行严格过滤和转义
完整流程示例
- 用户访问登录页面提交凭据
- 服务器验证CSRF令牌有效性
- 查询数据库匹配用户名
- 使用
password_verify()比对密码哈希 - 创建会话并设置安全cookie
- 重定向到授权页面
所有数据库操作应使用预处理语句防止SQL注入,敏感操作需进行二次认证。






