概要

Session を使う入り口は session_start() 関数。これを呼んだ瞬間、PHP は「クライアントから来た Cookie に PHPSESSID があればそれを使い、無ければ新規発行する」「対応する Session ファイルがあれば読み込み、無ければ新規作成する」をまとめて面倒見てくれる。利用者は呼ぶだけで、後は $_SESSION 連想配列 に値を入れたり取ったりすればよい。

$_SESSION['name'] = '太郎' と書いて画面を閉じても、次に同じブラウザで開けば '太郎' のまま読める。値が サーバー側のファイル (/tmp/sess_<sessionId> 等) に書かれていて、ブラウザ側には ID しか残らない構造だから。本物のデータはサーバー管理下、という安全な設計。

採点ランナーは CLI で動く ので、Cookie 経由の ID 同期はそのまま再現できない。代わりに ini_set('session.use_cookies', '0') で Cookie 機構を切り、session_id('固定ID') で ID を直接指定する 採点用スタブ が冒頭に入っている。これで 1 プロセス内でも session_start を擬似的に呼べる、と理解する。

学習目標

ドリル

no 内容
01 $_SESSION['name']'太郎' を保存して echo
02 同一プロセス内で $_SESSION['count'] を 3 回 increment して最終値を出力

本物のセッション動作で確認したい場合

cd topics/session-cookie/ch02-session-basic/drill/01-set-and-get/
php -S localhost:8000 answer.php

ブラウザで http://localhost:8000/ を開く。リロードすると Session が保持されていることを開発者ツール (Application → Cookies) で PHPSESSID として確認できる。

演習: ドリル 01 — `$_SESSION['name']` への代入と取得

問題

$_SESSION['name']'太郎' を代入し、その値を 1 行で出力する PHP を書いてください。

採点ランナーは CLI 直実行なので、answer.php の冒頭で session 用スタブ (use_cookies=0 / 固定 session_id) を入れて Session を擬似化してください。スタブは starter.php に最初から書いてあります。

期待される出力:

太郎

ヒント

// 採点用スタブの後に、こう書く
$_SESSION['name'] = '太郎';
echo $_SESSION['name'] . "\n";

本物のセッション動作で確認したい場合

cd topics/session-cookie/ch02-session-basic/drill/01-set-and-get/
php -S localhost:8000 answer.php

ブラウザで http://localhost:8000/ を開く。リロードしても同じ値が表示される (Session が PHPSESSID で保たれている)。

演習: ドリル 02 — `$_SESSION['count']` で 3 回 increment

問題

同一プロセス内で $_SESSION['count']3 回 increment して、最終的な値を 1 行で出力してください。

期待される出力:

3

ヒント

$_SESSION['count'] = $_SESSION['count'] ?? 0;
for ($i = 0; $i < 3; $i++) {
    $_SESSION['count']++;
}
echo $_SESSION['count'] . "\n";

本物のセッション動作で確認したい場合

cd topics/session-cookie/ch02-session-basic/drill/02-counter/
php -S localhost:8000 answer.php

ブラウザで http://localhost:8000/ を開き、リロードするたびに 3 ずつ増える ことを確認 (Session に保持されている)。

この章を AI に聞く

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

    💬 ChatGPT 📘 Claude ✨ Gemini

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

    💬 ChatGPT 📘 Claude ✨ Gemini

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

    💬 ChatGPT 📘 Claude ✨ Gemini

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

ch02 — `session_start()` と `$_SESSION` の基本」を読み終えました。
学んだことを誰かに教えると、もっと記憶に残ります。

X で共有 Hatena LINE