クッキーとセッションの違い

更新日:2025/03/06

クッキーとは何か?

Cookieが生まれた背景と理由

なぜCookieは生まれたのか 問題 HTTPはステートレス(状態を持たない) → ユーザーを識別できない、買い物かごを覚えられない 解決策:Cookie (1994年誕生) ブラウザに小さなデータを保存 同じサイトに訪れると自動的に送信される → ユーザー識別が可能になった

HTTPはステートレス(状態を保持しない)

HTTPの通信は、クライアント(例:ブラウザ)からのリクエストと、それに対するサーバーからのレスポンスで成り立っている。

Webブラウザ Webサーバー HTTPリクエスト (GET /index.html) HTTPレスポンス (HTMLデータ)

HTTPの問題点

HTTPはステートレス(状態を持たない)なやりとりをしており、前回のリクエストの記憶を持つことができませんでした、、

HTTPの基本的な仕組み HTTPはステートレス 各リクエストは独立しており、前回の通信を覚えていない クライアント (ブラウザ) サーバー (Webサーバー) リクエスト1: ログインページを表示 レスポンス1: ログインページ リクエスト2: ログイン情報送信 レスポンス2: ホームページ 問題点 サーバーはリクエスト2を受け取っても、リクエスト1を送ったのと 同じクライアントだと識別できない(ログイン状態を保持できない)

そこでユーザーの状態を保持するためにクッキーが考えれました。

クッキーを使用し、ユーザーの識別情報をブラウザに保存し、次回アクセス時にサーバーに送信できるようになりました。

クッキーとは

クッキー(Cookie)とは、ユーザーのブラウザに保存する小さなテキストデータ(ファイル)のことです​

クッキー (Cookie) とは 特徴 ・ブラウザに保存される小さなデータ ・ウェブサイトごとに保存される ・有効期限を設定できる 主な用途 ・ログイン状態の記憶 ・ユーザー設定の保存 ・買い物かご情報の保持 PHPでは$_COOKIEで参照し、setcookie()関数で設定します

クッキーの仕組み

Cookieの基本的な動作フロー 1. サイトを開くと、サーバーがCookieを発行 ユーザー サーバー Cookie 2. Cookieがブラウザに保存される ユーザー Cookie 3. 次回、保存したCookieをサーバーに送る ユーザー サーバー Cookie送信 4. サーバーが「前回と同じ人だ!」と認識 ユーザー サーバー 認識完了!

実際のデータの流れ

  1. サーバーでクッキー(user_id)を発行します。
<?php
// user_id=12345 をクッキーに設定(有効期限は1時間後)
setcookie("user_id", "12345", time() + 3600, "/");
?>
  1. サーバーが発行したクッキーは、以下のようなテキストデータとしてブラウザに保存されます。
user_id=12345
  1. クッキーがブラウザに保存されている状態でサーバーにリクエストすると、ブラウザが自動的にクッキーの内容を「Cookie」ヘッダーに含めて自動的にサーバーに送信されます
HTTP/1.1 200 OK
Set-Cookie: session_id=abc123; Expires=Fri, 31 Dec 2025 23:59:59 GMT; Path=/; HttpOnly
  1. サーバーが $_COOKIE でクッキーの値を取得

クッキーでセキュアな情報を扱う際の問題

クッキーは ユーザーのPCやスマホ(ブラウザ)に保存される ため、ユーザー自身や攻撃者が編集可能 です

⬇️

改ざん盗聴のリスクが伴います​

こうしたリスクへの対策として、クッキーの内容は常に信用しないようにし、重要な情報(ユーザーの権限や個人情報など)を直接クッキーに保存しないことが基本です​

セッションとは何か?

セッション誕生の背景

クッキーのセキュリティリスクを解決する方法として、サーバー側でデータを管理する「セッション」という仕組みが生まれました。

📌 セッションの考え方

  • クライアント側には セッションIDだけをクッキーで保存 し、実際のデータはサーバーで管理する。
2. セッションの仕組み セッションとは クライアントとサーバー間の一連の通信の流れ セッション管理の仕組み クライアントに一意のID(セッションID)を割り当て、 そのIDを使って複数のリクエスト間で状態を保持する クライアント セッションID: abc123 サーバー セッション情報: ID: abc123 ユーザー: 田中太郎 ログイン状態: 有効 リクエスト + セッションID カスタマイズされたレスポンス セッション管理のメリット ログイン状態の保持、カート情報の保存、ユーザー体験のカスタマイズが可能に

PHPでのセッション作成の流れ

  1. PHPでセッションを開始するには session_start(); を呼び出します。
    $_SESSION 変数を使ってデータをセットできます。
<?php
session_start(); // セッション開始

// ユーザー情報をセッションに保存
$_SESSION["user_id"] = 12345;
$_SESSION["username"] = "JohnDoe";

echo "セッションを作成しました。";
?>

✅ このスクリプトを実行すると、サーバーにセッションデータが保存され、クライアントには PHPSESSID というクッキーがセットされる。

  1. $_SESSION にデータを保存すると、サーバー側のセッションファイルに書き込まれる。
    (PHPのデフォルト設定では、セッションデータは /tmp/ や /var/lib/php/sessions/ にファイルとして保存されます。)
  2. 次回アクセス時、クライアントのセッションIDを元にサーバーのセッションファイルを読み取り、$_SESSION に復元する。

$_POST$_SESSION はセットで使用することが多いです

<?php
session_start(); // セッション開始

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username = $_POST["username"];
    $password = $_POST["password"];

    // 仮の認証(通常はデータベースで確認)
    if ($username == "admin" && $password == "pass123") {
        $_SESSION["username"] = $username; // セッションに保存
        echo "ログイン成功!<a href='dashboard.php'>ダッシュボードへ</a>";
    } else {
        echo "ログイン失敗";
    }
}
?>
項目$_POST$_SESSION
データの保存場所クライアント(HTTPリクエストの本文)サーバー(セッションファイル)
データの寿命リクエストが完了すると消える(一時的)ブラウザを閉じるまで or session_destroy() で消える
データのアクセス方法送信時のみ取得可能session_start() を呼べばいつでも取得可能
主な用途フォームの入力データの受け取りユーザー情報や入力データの一時保存

👉 つまり、$_POST はリクエストごとにデータが消えるが、$_SESSION はページをまたいでもデータを保持できる!

クッキーとセッションの根本的な違い

クッキーとセッションの最も大きな違いは、データの保存場所です。

クッキーはユーザーのブラウザ(クライアント側)にデータを保存しますが、セッションはサーバー側にデータを保存し、クライアント側には識別用のセッションIDのみを保存します​

人気記事ランキング
話題のキーワードから探す