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";
}
▶ 3v4l で実行

本物の 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";
}