topic: session-cookie (session / cookie / login / CSRF) / ch04 — ログイン状態を `$_SESSION` で保つ / 演習 01
📝 ドリル 01 — ログイン → マイページ表示
問題
$_SESSION を使って「ログイン → マイページ表示」を 1 スクリプトで擬似化してください。
- 標準入力 1 行目をログインフォームの送信 (例:
name=太郎) と見なし、$_POSTに展開する - 「ログイン処理」として
$_SESSION['user'] = ['name' => $_POST['name']]を実行する - 「マイページ」として
isset($_SESSION['user'])を判定し、"ようこそ、{name}さん"を出力する
このドリルの入力例 (tests/input.txt):
name=太郎
期待される出力:
ようこそ、太郎さん
採点
php scripts/grade.php topics/13-session-cookie/ch04-login-flow/drill/01-login/
ヒント
// 「リクエスト 1: ログインフォーム送信」
$line = trim(fgets(STDIN) ?: '');
parse_str($line, $_POST);
$_SESSION['user'] = ['name' => $_POST['name']];
// 「リクエスト 2: マイページ」
if (isset($_SESSION['user'])) {
echo "ようこそ、{$_SESSION['user']['name']}さん\n";
} else {
echo "未ログイン\n";
}本物の Web で確認したい場合
cd topics/13-session-cookie/ch04-login-flow/drill/01-login/
php -S localhost:8000 answer.php
ブラウザで http://localhost:8000/?name=太郎 を開く (ドリルでは $_POST 想定だが、php -S 単独確認時は $_GET で代用可)。
テストケース
標準入力
name=太郎
期待される出力
ようこそ、太郎さん
📄 starter.php(雛形)
このコードから書き始めてください。
<?php
// 採点用スタブ: CLI で session_start() を安定動作させるための前処理
error_reporting(E_ERROR);
ini_set('session.use_cookies', '0');
ini_set('session.use_only_cookies', '0');
$tmpDir = sys_get_temp_dir() . '/dojo_l13_' . getmypid();
@mkdir($tmpDir, 0700, true);
session_save_path($tmpDir);
session_id('TESTSESSIONID');
@session_start();
// 採点用: stdin の 1 行目をフォーム送信として $_POST に展開
$line = trim(fgets(STDIN) ?: '');
parse_str($line, $_POST);
// TODO: ログイン処理として $_SESSION['user'] に ['name' => $_POST['name']] を入れる
// TODO: マイページとして isset($_SESSION['user']) を判定し、
// "ようこそ、{name}さん" を 1 行出力する (未ログインなら "未ログイン")
✅ 解答例を見る(自分で解いてから)
<?php
// 採点用スタブ: CLI で session_start() を安定動作させるための前処理
error_reporting(E_ERROR);
ini_set('session.use_cookies', '0');
ini_set('session.use_only_cookies', '0');
$tmpDir = sys_get_temp_dir() . '/dojo_l13_' . getmypid();
@mkdir($tmpDir, 0700, true);
session_save_path($tmpDir);
session_id('TESTSESSIONID');
@session_start();
// 採点用: stdin の 1 行目をフォーム送信として $_POST に展開
$line = trim(fgets(STDIN) ?: '');
parse_str($line, $_POST);
// リクエスト 1: ログイン
$_SESSION['user'] = ['name' => $_POST['name']];
// リクエスト 2: マイページ
if (isset($_SESSION['user'])) {
echo "ようこそ、{$_SESSION['user']['name']}さん\n";
} else {
echo "未ログイン\n";
}