topic: session-cookie (session / cookie / login / CSRF) / ch03 — `setcookie()` と `$_COOKIE` / 演習 02
📝 ドリル 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 を手動追加してリロード。
テストケース
標準入力
name=太郎
lang=ja
theme=dark
期待される出力
name=太郎
lang=ja
theme=dark
📄 starter.php(雛形)
このコードから書き始めてください。
<?php
// 採点用スタブ: 標準入力の各行を Cookie として $_COOKIE に累積展開
$_COOKIE = [];
while (($line = fgets(STDIN)) !== false) {
$line = trim($line);
if ($line === '') continue;
$pair = [];
parse_str($line, $pair);
$_COOKIE = array_merge($_COOKIE, $pair);
}
// TODO: $_COOKIE の各 key=value を 1 行ずつ "{key}={value}" の形で出力する
✅ 解答例を見る(自分で解いてから)
<?php
// 採点用スタブ: 標準入力の各行を Cookie として $_COOKIE に累積展開
$_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";
}