在 Web 开发中,用户登录后的页面跳转是非常常见的功能。使用 PHP,我们可以通过 session_start() 来管理用户的登录状态,再结合 header() 函数实现页面的重定向。本文将一步步讲解如何实现这一功能。
session_start()
session_start() 是 PHP 中用于开启会话的方法。它会在服务器端保存用户的信息,比如用户名、用户 ID 等,从而在多次请求中识别同一用户。
header()
header() 是 PHP 用来发送原始 HTTP 头部信息的函数。常见用途之一是发送 Location 头,从而让浏览器跳转到另一个页面。
需要注意:
header() 必须在输出任何内容(包括空格或 HTML)之前调用。
session_start() 也要在任何输出之前调用。
假设我们有一个简单的登录表单,登录成功后需要跳转到用户的个人主页。
<?php
// 开启 session
session_start();
?>
<!DOCTYPE html>
<html>
<head>
<title>用户登录</title>
</head>
<body>
<form method="post" action="login_process.php">
用户名: <input type="text" name="username"><br>
密码: <input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
<?php
session_start();
// 模拟的用户名和密码
$correct_username = 'admin';
$correct_password = '123456';
// 获取提交的数据
$username = $_POST['username'] ?? '';
$password = $_POST['password'] ?? '';
// 检查用户名和密码是否正确
if ($username === $correct_username && $password === $correct_password) {
// 登录成功,设置 session
$_SESSION['username'] = $username;
// 跳转到用户主页
header('Location: https://m66.net/user_home.php');
exit;
} else {
// 登录失败,跳转回登录页
header('Location: https://m66.net/login.php?error=1');
exit;
}
?>
<?php
session_start();
// 检查是否已登录
if (!isset($_SESSION['username'])) {
// 如果没有登录,跳转到登录页面
header('Location: https://m66.net/login.php');
exit;
}
$username = $_SESSION['username'];
?>
<!DOCTYPE html>
<html>
<head>
<title>欢迎,<?php echo htmlspecialchars($username); ?></title>
</head>
<body>
<h1>欢迎回来,<?php echo htmlspecialchars($username); ?>!</h1>
<p><a href="logout.php">退出登录</a></p>
</body>
</html>
<?php
session_start();
session_unset();
session_destroy();
// 跳转回登录页面
header('Location: https://m66.net/login.php');
exit;
?>
输出前调用 header() 和 session_start()
只要页面上有任何输出(包括 HTML、空格、换行等),header() 和 session_start() 都会报错。确保它们在文件最顶部调用。
安全性
示例代码中用户名和密码是写死的,实际项目中应从数据库中获取,并使用加密(如 password_hash() 和 password_verify())。
退出登录
退出时一定要清理 session,否则即使跳转回登录页,用户状态依然存在。