php 登录怎么实现
PHP 登录实现步骤
数据库准备
创建用户表,包含字段如 id, username, password(需哈希存储)。示例 SQL:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL
);
注册功能
处理用户注册时使用 password_hash 加密密码:
$hashed_password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$stmt = $pdo->prepare("INSERT INTO users (username, password) VALUES (?, ?)");
$stmt->execute([$_POST['username'], $hashed_password]);
登录验证
验证用户输入与数据库匹配时使用 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_start();
$_SESSION['user_id'] = $user['id'];
header("Location: dashboard.php");
} else {
echo "Invalid credentials";
}
会话管理 登录成功后启动会话并设置保护页面:
session_start();
if (!isset($_SESSION['user_id'])) {
header("Location: login.php");
exit();
}
安全增强

- 使用预处理语句防止 SQL 注入
- 启用 HTTPS 传输数据
- 设置
session.cookie_httponly和session.cookie_secure - 登录失败时限制尝试次数
密码重置 通过邮件发送令牌实现:
$token = bin2hex(random_bytes(32));
$stmt = $pdo->prepare("UPDATE users SET reset_token = ?, token_expiry = DATE_ADD(NOW(), INTERVAL 1 HOUR) WHERE email = ?");
$stmt->execute([$token, $_POST['email']]);
// 发送含令牌链接的邮件
记住我功能 使用安全 cookie 实现持久登录:
$selector = bin2hex(random_bytes(8));
$validator = random_bytes(32);
setcookie(
'remember',
$selector.':'.bin2hex($validator),
time() + 86400 * 30,
'/',
'yourdomain.com',
true,
true
);






