採点されません。匿名です。 間違えることは学習の一部です。読むだけでもかまいません。

`session_start()` と `$_SESSION`

テクノロジ系 / session-cookie (session / cookie / login / CSRF)

session_start()$_SESSION

Lesson 13 / Chapter 2

最小の Session 操作

<?php
session_start();                   // 1. Session を開始する
$_SESSION['name'] = '太郎';        // 2. 連想配列に書き込む
echo $_SESSION['name'];            // 3. 読み出す
  • session_start()最初に呼ぶ のが鉄則 (ヘッダ送信より前)
  • $_SESSION はただの連想配列。読み書きの作法は $_GET / $_POST と同じ
  • リクエストをまたいでも、同じブラウザなら $_SESSION['name']残り続ける

$_SESSION は連想配列 (array-assoc トピックと同じ)

<?php
session_start();
$_SESSION['user'] = [
    'id'   => 42,
    'name' => '太郎',
    'role' => 'admin',
];

echo $_SESSION['user']['name'];   // 太郎
  • ネストした配列・オブジェクトもそのまま入る
  • PHP が裏側でシリアライズして保存してくれるので、利用側は気にしなくて良い

→ ただし「何を入れるか」は自分で決める。何でも詰めると Session が肥大化する。

CLI 採点用スタブ: cookie を切る

session_start()本来 ブラウザ + Web サーバーが前提。CLI で素直に呼ぶと:

PHP Warning: session_start(): Cannot send session cookie - headers already sent

CLI で安定動作させるために、Cookie 経路を切る スタブを冒頭に置く:

<?php
// 採点用スタブ: header() / cookie 関連の警告を抑止
ini_set('session.use_cookies', '0');
ini_set('session.use_only_cookies', '0');
session_id('TESTSESSIONID');  // 固定 ID で Session を擬似化
@session_start();
  • use_cookies=0 で Cookie 自動発行を止める
  • session_id()固定 ID を渡し、毎回同じ Session を引けるようにする
  • 本物の Web では PHP が自動で ID を発行するので、このスタブは不要

同一プロセス内でも $_SESSION は使える

採点ランナーは 1 リクエストぶんしか実行しない。それでも $_SESSION を使う意味は:

<?php
// 採点用スタブ ...

$_SESSION['count'] = 0;
for ($i = 0; $i < 3; $i++) {
    $_SESSION['count']++;
}
echo $_SESSION['count'];   // 3

プロセス内で」読み書きできるので、ログイン → マイページのような 2 リクエスト分のシナリオを 1 スクリプトで擬似化 できる (ch04 で使う)。

「無ければ初期化」のお作法

<?php
session_start();

// ✅ 初回アクセスでも落ちない
if (!isset($_SESSION['count'])) {
    $_SESSION['count'] = 0;
}
$_SESSION['count']++;
echo $_SESSION['count'];

または ?? で:

$_SESSION['count'] = ($_SESSION['count'] ?? 0) + 1;
  • 初回アクセス時は $_SESSION は空 → そのまま ++ すると警告
  • isset?? で必ず初期値を用意する

このチャプターでできるようになること

session_start() で Session を開始できる

$_SESSION['key'] = value で値を保存・取得できる

✅ CLI 採点用スタブ (use_cookies=0 + 固定 session_id) を理解している

✅ 「無ければ初期化」を isset または ?? で書ける

→ ドリルへ

考えてみよう

既定では正解・不正解の判定はしません。自分のペースで「答えを見る」を。採点してほしい場合だけ「採点してほしい」を押してください。