Webアプリケーションでは、「ログイン状態を保持したい」「訪問者の情報を記憶したい」といったニーズがよくあります。
PHPではセッションとクッキーという機能を使って、それらを簡単に実現できます。
本記事では、セッションとクッキーの基本的な使い方と、ログイン状態を管理するための実践的なコード例を紹介します。

セッションの開始と変数の保持
セッションは、サーバー側にユーザーごとの情報を一時的に保持する仕組みです。
ユーザーがサイトを離れるまで(または一定時間が経過するまで)データが維持されます。
セッションの基本コード
<?php
session_start();
// セッションを開始
// 値を保存
$_SESSION["username"] = "tanaka";
// 値を取得
echo "こんにちは、" . $_SESSION["username"] . "さん!";
// セッションの削除(ログアウト処理などで使用)
session_unset();
session_destroy();
>
session_start()
は、スクリプトの先頭で必ず一度だけ呼び出してください。
クッキーの設定と取得
クッキーは、ユーザーのブラウザにデータを保存しておく仕組みです。
ログインIDの保存や、最終アクセス日時の記録などに使われます。
クッキーの基本コード
<?php
// クッキーを設定(有効期限:1時間後)
setcookie("user_id", "tanaka123", time() + 3600);
// クッキーを取得
if (isset($_COOKIE["user_id"])) {
echo "ようこそ、" . htmlspecialchars($_COOKIE["user_id"], ENT_QUOTES, "UTF-8") . "さん!";
}
>
クッキーは設定してから次のリクエストで使えるようになります。
セッションとクッキーを使った簡単なログイン状態の管理
以下は、ログインフォーム → セッションによるログイン状態保持 → ログアウトまでの流れをまとめた例です。
<!-- login.php -->
<?php
session_start();
$validUser = "admin";
$validPass = "password";
$error = "";
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$user = $_POST["username"] ?? "";
$pass = $_POST["password"] ?? "";
if ($user === $validUser && $pass === $validPass) {
$_SESSION["login_user"] = $user;
// 「ログイン状態を記憶する」にチェックされていればクッキー保存
if (isset($_POST["remember"])) {
setcookie("remember_user", $user, time() + 3600);
}
header("Location: dashboard.php");
exit;
} else {
$error = "ユーザー名またはパスワードが違います。";
}
}
>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<h2>ログインフォーム</h2>
<?php
if ($error) echo "<p style='color:red;'>$error</p>";
>
<form method="post">ユーザー名:
<input type="text" name="username" value="<?= $_COOKIE['remember_user'] ?? '' ?>"
><br>
パスワード:<input type="password" name="password"><br>
<label><input type="checkbox" name="remember">ログイン状態を記憶</label><br>
<input type="submit" value="ログイン">
</form>
</body>
</html>
<!-- dashboard.php -->
<?php
session_start();
if (!isset($_SESSION["login_user"])) {
header("Location: login.php");
exit;
}
>
<h2>ようこそ、<?= htmlspecialchars($_SESSION["login_user"], ENT_QUOTES, "UTF-8") ?> さん</h2> <p><a href="logout.php">ログアウト</a></p>
<!-- logout.php -->
<?php
session_start();
session_destroy();
header("Location: login.php");
exit;
>
ポイント
session_start()
は毎ページで必要- ログイン情報はセッションで管理、クッキーは「記憶する」用途に
- セキュリティ対策として
htmlspecialchars()
も忘れずに
まとめ
今回は、PHPのセッションとクッキーの基本と、それらを使ったログイン状態の管理方法について紹介しました。
- セッション:ユーザーごとの一時情報(ログイン情報など)
- クッキー:ブラウザに保持される情報(記憶用など)
- ログイン管理:セッション+クッキーで状態を制御
次回は「データベース連携(PDO)」を通じて、ログイン機能をさらに実用レベルに引き上げていきます!