php 实现登录
PHP 实现登录功能
PHP 实现登录功能通常需要处理表单提交、验证用户输入、查询数据库以及设置会话(Session)。以下是一个基本的登录实现流程:
创建登录表单(HTML)
创建一个简单的 HTML 表单,用于用户输入用户名和密码。
<form action="login.php" method="POST">
<label for="username">用户名:</label>
<input type="text" id="username" name="username" required>
<label for="password">密码:</label>
<input type="password" id="password" name="password" required>
<button type="submit">登录</button>
</form>
处理登录逻辑(PHP)
在 login.php 文件中,处理表单提交的数据,验证用户信息并设置会话。
<?php
session_start();
// 模拟数据库中的用户数据(实际项目中应从数据库查询)
$valid_users = [
'admin' => password_hash('admin123', PASSWORD_DEFAULT),
'user' => password_hash('user123', PASSWORD_DEFAULT)
];
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = $_POST['username'] ?? '';
$password = $_POST['password'] ?? '';
// 检查用户名是否存在且密码匹配
if (isset($valid_users[$username]) && password_verify($password, $valid_users[$username])) {
$_SESSION['username'] = $username;
header('Location: dashboard.php');
exit();
} else {
echo "用户名或密码错误!";
}
}
?>
验证会话并保护页面
在受保护的页面(如 dashboard.php)中,检查用户是否已登录。
<?php
session_start();
if (!isset($_SESSION['username'])) {
header('Location: login.php');
exit();
}
echo "欢迎, " . $_SESSION['username'] . "! 这是您的仪表盘。";
?>
实现登出功能
创建一个 logout.php 文件,用于销毁会话并重定向到登录页面。
<?php
session_start();
session_destroy();
header('Location: login.php');
exit();
?>
安全性注意事项
- 密码哈希:始终使用
password_hash()和password_verify()处理密码,避免明文存储。 - 防止 SQL 注入:如果从数据库查询,使用预处理语句(如 PDO 或 MySQLi)。
- HTTPS:确保登录页面通过 HTTPS 传输,避免敏感信息被截获。
- CSRF 防护:为表单添加 CSRF 令牌,防止跨站请求伪造攻击。
完整示例代码
以下是一个更完整的示例,包含数据库查询和 CSRF 防护:

// login.php
<?php
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 验证 CSRF 令牌
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die("CSRF 验证失败!");
}
$username = $_POST['username'];
$password = $_POST['password'];
// 数据库查询(使用 PDO)
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$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'];
$_SESSION['username'] = $user['username'];
header('Location: dashboard.php');
exit();
} else {
echo "用户名或密码错误!";
}
}
// 生成 CSRF 令牌
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
?>
<form action="login.php" method="POST">
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
<label for="username">用户名:</label>
<input type="text" id="username" name="username" required>
<label for="password">密码:</label>
<input type="password" id="password" name="password" required>
<button type="submit">登录</button>
</form>
通过以上步骤,可以实现一个基本的 PHP 登录功能。实际项目中,还需进一步优化安全性(如限制登录尝试次数)和用户体验(如记住登录状态)。






