php实现登录退出代码
PHP 登录功能实现
数据库连接配置
创建 config.php 文件存储数据库连接信息:
<?php
$host = 'localhost';
$db = 'your_database';
$user = 'your_username';
$pass = 'your_password';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
?>
登录表单
创建 login.php 文件:
<?php include 'config.php'; ?>
<form action="authenticate.php" method="post">
<input type="text" name="username" placeholder="Username" required>
<input type="password" name="password" placeholder="Password" required>
<button type="submit">Login</button>
</form>
认证处理
创建 authenticate.php 文件:
<?php
session_start();
include 'config.php';
$username = $_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'];
$_SESSION['username'] = $user['username'];
header("Location: dashboard.php");
exit();
} else {
echo "Invalid credentials!";
}
?>
PHP 退出功能实现
退出处理
创建 logout.php 文件:
<?php
session_start();
session_unset();
session_destroy();
header("Location: login.php");
exit();
?>
会话验证
受保护页面
创建 dashboard.php 文件验证会话:
<?php
session_start();
if (!isset($_SESSION['user_id'])) {
header("Location: login.php");
exit();
}
?>
<!DOCTYPE html>
<html>
<body>
<h1>Welcome, <?php echo $_SESSION['username']; ?></h1>
<a href="logout.php">Logout</a>
</body>
</html>
安全注意事项
密码应使用 password_hash() 存储,示例注册代码:
$hashed_password = password_hash($plain_password, PASSWORD_DEFAULT);
建议添加CSRF保护,登录表单可加入:
$_SESSION['token'] = bin2hex(random_bytes(32));
<input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
认证时验证token:
if (!hash_equals($_SESSION['token'], $_POST['token'])) {
die("CSRF token validation failed");
}






