概要

Session の裏側で使われている Cookie 自体を 直接 扱う章。書き込みは setcookie('name', 'value')、読み込みは $_COOKIE['name']。Session を立てるほどでもない軽い情報 (ダークモード設定・言語選択など) を保つ用途で実務でも頻出する。

setcookie() は多くのオプションを取る。第 3 引数で 有効期限 (UNIX タイムスタンプ)、配列形式で渡せば Path / Domain / Secure / HttpOnly を細かく指定できる。とくに HttpOnly (JavaScript から読めない) と Secure (HTTPS 専用) は XSS や盗聴対策の必須属性で、Session Cookie には絶対に付けたい。

setcookie() で書いた値は 「ブラウザに『次から送ってね』と頼んでいるだけ」 で、自分の $_COOKIE には即時反映されない。$_COOKIE に乗ってくるのは 次のリクエスト から。これも HTTP が 1 往復で完結することの帰結。CLI 採点ランナーでは、stdin から Cookie 文字列を読んで $_COOKIE を手で組み立てるスタブで疑似化する。

学習目標

ドリル

no 内容
01 stdin から name=太郎 を読み、$_COOKIE['name'] を出力
02 stdin の複数行から key=value を読み、$_COOKIE を組み立てて出力

本物の Cookie 動作で確認したい場合

cd topics/session-cookie/ch03-cookie-basic/drill/01-read-cookie/
php -S localhost:8000 answer.php

ブラウザの開発者ツール (Application → Cookies) で Cookie を手動で追加し、リロードして $_COOKIE 経由で読めることを確認する。

演習: ドリル 01 — stdin から `$_COOKIE['name']` を組み立てて出力

問題

採点ランナーは CLI 直実行なので、answer.php の冒頭で 標準入力の 1 行を Cookie 文字列として parse_str$_COOKIE に展開 してください (スタブはコードに含めて構いません)。

$_COOKIE['name'] を取り出し、"こんにちは、{name}さん" を 1 行出力してください。name が無ければ 'guest' をフォールバックとして使ってください。

このドリルの入力例 (tests/input.txt):

name=太郎

期待される出力:

こんにちは、太郎さん

ヒント

$line = trim(fgets(STDIN) ?: '');
parse_str($line, $_COOKIE);
$name = $_COOKIE['name'] ?? 'guest';
echo "こんにちは、{$name}さん\n";

本物の Cookie 動作で確認したい場合

cd topics/session-cookie/ch03-cookie-basic/drill/01-read-cookie/
php -S localhost:8000 answer.php

ブラウザの開発者ツール (Application → Cookies) で name=太郎 を手動追加してリロード。

演習: ドリル 02 — 複数 Cookie を読んで一覧出力

問題

採点ランナーは複数行の入力を流し込みます。各行が 1 つの Cookie (key=value) を表します。

このドリルの入力例 (tests/input.txt):

name=太郎
lang=ja
theme=dark

期待される出力:

name=太郎
lang=ja
theme=dark

ヒント

$_COOKIE = [];
while (($line = fgets(STDIN)) !== false) {
    $line = trim($line);
    if ($line === '') continue;
    $pair = [];
    parse_str($line, $pair);
    $_COOKIE = array_merge($_COOKIE, $pair);
}
foreach ($_COOKIE as $k => $v) {
    echo "{$k}={$v}\n";
}

本物の Cookie 動作で確認したい場合

cd topics/session-cookie/ch03-cookie-basic/drill/02-multiple-cookies/
php -S localhost:8000 answer.php

ブラウザの開発者ツールから複数の Cookie を手動追加してリロード。

この章を AI に聞く

  1. 「ch03 — `setcookie()` と `$_COOKIE`」のつまずきやすいポイントを、初学者向けに3つ教えてください

    💬 ChatGPT 📘 Claude ✨ Gemini

  2. 「ch03 — `setcookie()` と `$_COOKIE`」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    💬 ChatGPT 📘 Claude ✨ Gemini

  3. 「ch03 — `setcookie()` と `$_COOKIE`」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    💬 ChatGPT 📘 Claude ✨ Gemini

🎉 受講お疲れさまでした!

ch03 — `setcookie()` と `$_COOKIE`」を読み終えました。
学んだことを誰かに教えると、もっと記憶に残ります。

X で共有 Hatena LINE