概要
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 を擬似的に呼べる、と理解する。
学習目標
session_start()で Session を開始できる$_SESSION['key'] = valueで値を保存し、$_SESSION['key']で取り出せる- CLI 採点用の session スタブ (use_cookies=0 / 固定 session_id) を理解して使える
ドリル
| 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 行で出力してください。
$_SESSION['count']が未設定なら0で初期化してから increment する- ループでも 3 回
++でも実装方法は問わない
期待される出力:
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 に聞く
-
「ch02 — `session_start()` と `$_SESSION` の基本」のつまずきやすいポイントを、初学者向けに3つ教えてください
-
「ch02 — `session_start()` と `$_SESSION` の基本」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)
-
「ch02 — `session_start()` と `$_SESSION` の基本」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください