topic: session-cookie (session / cookie / login / CSRF) / ch03
ch03 — `setcookie()` と `$_COOKIE`
学習目標
setcookie('name', 'value')でブラウザに Cookie を書き出せる$_COOKIE['name']でブラウザから送られてきた Cookie を読める- 採点用に stdin から Cookie 文字列を読んで
$_COOKIEをスタブする 書き方を知る
所要時間
スライド 5 分 + ドリル 2 問 = 25 分
ドリル
| no | 内容 |
|---|---|
| 01 | stdin から name=太郎 を読み、$_COOKIE['name'] を出力 |
| 02 | stdin の複数行から key=value を読み、$_COOKIE を組み立てて出力 |
本物の Cookie 動作で確認したい場合
cd topics/13-session-cookie/ch03-cookie-basic/drill/01-read-cookie/
php -S localhost:8000 answer.php
ブラウザの開発者ツール (Application → Cookies) で Cookie を手動で追加し、リロードして $_COOKIE 経由で読めることを確認する。
演習問題の詳細
この章の演習問題の内容を読めます。実際に手元で解くには教材リポジトリを clone してください。
ドリル 01 — stdin から `$_COOKIE['name']` を組み立てて出力
問題
採点ランナーは CLI 直実行なので、answer.php の冒頭で 標準入力の 1 行を Cookie 文字列として parse_str で $_COOKIE に展開 してください (スタブはコードに含めて構いません)。
$_COOKIE['name'] を取り出し、"こんにちは、{name}さん" を 1 行出力してください。name が無ければ 'guest' をフォールバックとして使ってください。
このドリルの入力例 (tests/input.txt):
name=太郎
期待される出力:
こんにちは、太郎さん
採点
php scripts/grade.php topics/13-session-cookie/ch03-cookie-basic/drill/01-read-cookie/
ヒント
$line = trim(fgets(STDIN) ?: '');
parse_str($line, $_COOKIE);
$name = $_COOKIE['name'] ?? 'guest';
echo "こんにちは、{$name}さん\n";本物の Cookie 動作で確認したい場合
cd topics/13-session-cookie/ch03-cookie-basic/drill/01-read-cookie/
php -S localhost:8000 answer.php
ブラウザの開発者ツール (Application → Cookies) で name=太郎 を手動追加してリロード。
ドリル 02 — 複数 Cookie を読んで一覧出力
問題
採点ランナーは複数行の入力を流し込みます。各行が 1 つの Cookie (key=value) を表します。
- 各行を
parse_strで$_COOKIEに累積展開してください - 最終的な
$_COOKIEを、key=valueの形で 入力された順に 1 行ずつ出力 してください
このドリルの入力例 (tests/input.txt):
name=太郎
lang=ja
theme=dark
期待される出力:
name=太郎
lang=ja
theme=dark
採点
php scripts/grade.php topics/13-session-cookie/ch03-cookie-basic/drill/02-multiple-cookies/
ヒント
$_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/13-session-cookie/ch03-cookie-basic/drill/02-multiple-cookies/
php -S localhost:8000 answer.php
ブラウザの開発者ツールから複数の Cookie を手動追加してリロード。
演習問題(2問)
サイト内で問題文・雛形・解答例を確認できます。実際に手元で解くには教材リポジトリを clone してください。