Web開発では、ユーザーログイン後のページリダイレクトは非常に一般的な機能です。 PHPを使用して、 session_start()を介してユーザーのログインステータスを管理し、 header()関数を組み合わせてページリダイレクトを実現できます。この記事では、この機能を段階的に実装する方法について説明します。
session_start()
session_start()は、セッションを開始するためにPHPで使用される方法です。複数のリクエストで同じユーザーを識別するために、ユーザー名、ユーザーIDなど、サーバー側のユーザー情報を保存します。
ヘッダ()
Header()は、RAW HTTPヘッダー情報を送信するためにPHPが使用する関数です。一般的な用途の1つは、ロケーションヘッダーを送信することです。これにより、ブラウザが別のページにジャンプできるようになります。
注意する必要があります:
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()がエラーを報告します。それらがファイルの上部で呼び出されていることを確認してください。
セキュリティ<br> 例コードでは、ユーザー名とパスワードが死んで書かれています。実際のプロジェクトでは、データベースから取得し、暗号化を使用する必要があります( password_hash()やpassword_verify()など)。
ログアウト<br> 終了するときは必ずセッションをクリーニングしてください。そうしないと、ログインページに戻ってもユーザーステータスが存在します。