php实现登录退出代码
以下是一个简单的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 (empty($username) || empty($password)) {
$error = "用户名和密码不能为空";
} elseif (isset($valid_users[$username]) && password_verify($password, $valid_users[$username])) {
$_SESSION['user'] = $username;
$_SESSION['logged_in'] = true;
header('Location: dashboard.php');
exit;
} else {
$error = "无效的用户名或密码";
}
}
?>
登录表单HTML
<!DOCTYPE html>
<html>
<head>
<title>登录</title>
</head>
<body>
<?php if (isset($error)): ?>
<p style="color: red;"><?php echo htmlspecialchars($error); ?></p>
<?php endif; ?>
<form 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>
</body>
</html>
会话验证和受保护页面
<?php
// dashboard.php
session_start();
if (!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] !== true) {
header('Location: login.php');
exit;
}
echo "欢迎, " . htmlspecialchars($_SESSION['user']) . "!";
?>
退出功能实现
<?php
// logout.php
session_start();
// 清除所有会话变量
$_SESSION = array();
// 删除会话cookie
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
// 销毁会话
session_destroy();
// 重定向到登录页面
header('Location: login.php');
exit;
?>
安全注意事项
密码应使用password_hash()函数进行哈希存储,并使用password_verify()进行验证
所有用户输入都应使用htmlspecialchars()进行转义,防止XSS攻击
敏感页面应检查会话状态,未登录用户应重定向到登录页面
会话ID应定期更新,可以使用session_regenerate_id()函数
考虑实现CSRF保护机制,特别是在处理表单时
在生产环境中,应使用HTTPS来保护数据传输
数据库集成示例
如需连接真实数据库,可以替换验证部分为以下代码:

// 使用PDO连接MySQL数据库
$db = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
$stmt = $db->prepare("SELECT id, username, password 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'];
$_SESSION['logged_in'] = true;
// 其他登录成功处理
}
以上代码提供了PHP中实现登录和退出功能的基本框架,可以根据实际需求进行扩展和修改。






