
【6日でできるPHP入門】クッキーとセッション
Webアプリケーションでは「ユーザーがどんな行動をしたか」「どのページを見ているか」など、ユーザーごとに情報を記憶するしくみが欠かせません。その代表的な方法がクッキー(cookie)とセッション(session)です。
どちらも「一時的に情報を保存しておく」という目的は共通していますが、保存場所や使い方に大きな違いがあります。
この記事ではクッキーとセッションの違い・仕組み・連携方法、そして実際のPHPプログラム例を用いて詳しく解説します。

1.クッキーとセッションの基本
1.1. クッキーとセッションの違いを整理
| 仕組み | 保存場所 | 保存タイミング | 主な用途 |
|---|---|---|---|
| クッキー | ブラウザ(ユーザー端末) | 任意期間(設定による) | ログイン状態、IDの保持など |
| セッション | サーバ | ブラウザを閉じるまで等 | 買い物カゴ、会員状態の管理など |
クッキーはユーザーの端末(ブラウザ)に情報を保存します。
セッションはサーバ側で管理され、ユーザーごとに一時的な情報を保持します。
1.2. それぞれの特徴と連携のイメージ
| 特徴 | クッキー | セッション |
|---|---|---|
| 保存される場所 | クライアント(PCやスマホ等) | サーバ上 |
| 有効期限 | 指定可能(1日、1年など) | 通常はブラウザ終了で破棄 |
| セキュリティ | ユーザーが編集・閲覧できてしまう | サーバ側管理なので高め |
| 典型的な使い方 | ログインIDの保持、言語設定など | ログイン状態、カートの中身など |
2.PHPでのクッキーとセッション利用例
2.1. クッキーの基本的な使い方
PHPでクッキーを設定・取得するにはsetcookie()と$_COOKIEを使います。
例:ユーザー名をクッキーに保存し、再訪時に挨拶する
ファイル名: lesson61_1.php
<?php
// ユーザー名をクッキーに保存(1時間有効)
setcookie('user_name', 'さくら', time() + 3600);
// クッキーが存在すれば挨拶
if (isset($_COOKIE['user_name'])) {
echo "こんにちは、{$_COOKIE['user_name']}さん!<br>";
} else {
echo "初めまして!<br>";
}
?>出力例(2回目以降のアクセス時)

2.2. セッションの基本的な使い方
セッションはsession_start()で開始し、$_SESSION配列で値を管理します。
例:訪問回数をセッションでカウントする
ファイル名: lesson61_2.php
<?php
session_start(); // セッション開始
// セッションに「visit_count」がなければ初期化
if (!isset($_SESSION['visit_count'])) {
$_SESSION['visit_count'] = 1;
echo "はじめての訪問ですね。";
} else {
$_SESSION['visit_count']++;
echo "あなたの訪問回数:{$_SESSION['visit_count']}回目です。";
}
?>出力例(2回目以降のアクセス時)

3.クッキーとセッションの連携・実用例
3.1. ログイン情報の記憶
多くのWebサービスでは「次回も自動ログイン」を実現するため、クッキーにログインIDを保存し、セッションで認証状態を管理します。
イメージ例(フロー)
- ログインフォームでID/パスワードを送信
- 認証成功→ユーザーIDをセッションに保存、IDをクッキーにも保存
- 次回訪問時、クッキーのIDを自動入力欄に表示&セッションで認証確認
| 項目 | 保存場所 | 役割例 |
|---|---|---|
| ユーザーID | クッキー | 入力補助・再訪問時の利便性 |
| 認証状態 | セッション | サイト利用中の認証状態管理 |
まとめ
- クッキーは「ユーザーの端末に情報を残す」ための仕組み、セッションは「サーバ上で一時的にユーザー情報を管理」するための仕組みです。
- クッキーは便利な反面、ユーザー自身で削除・改ざんが可能なので機密情報の保存には注意が必要です。
- セッションはセキュリティ面で優れますが、ブラウザを閉じると基本的に情報が消えるため、状況によって使い分けが必要です。
- これらを組み合わせることで、Webアプリの利便性と安全性が大きく向上します。
PHPでは
setcookie()/$_COOKIEでクッキー管理session_start()/$_SESSIONでセッション管理
が基本です。
実際のWeb開発ではこの両者を状況に応じて使い分けましょう。
