【PHP8.x】session_status関数の使い方

作成日: 更新日:

session_status関数は、PHPアプリケーションにおける現在のセッションの状態を確認するために使用される関数です。セッションとは、ウェブサイトを訪れた個々のユーザーに関する情報を、サーバー側で一時的に保持する仕組みを指し、ログイン状態の維持やショッピングカートの内容管理など、多くのウェブアプリケーションで不可欠な要素です。

この関数は引数を取らず、実行すると現在のセッション機能がどのような状況にあるかを数値で返します。返される値は、PHPにあらかじめ定義されている以下の3つの定数のいずれかであり、それぞれが異なるセッションの状態を表しています。

  • PHP_SESSION_DISABLED: PHPのセッション機能自体が無効化されている状態です。この場合、セッションを開始しようとしても機能しません。
  • PHP_SESSION_NONE: セッション機能は有効ですが、まだsession_start()関数が呼び出されておらず、セッションが開始されていない状態です。この状態からセッションを開始することができます。
  • PHP_SESSION_ACTIVE: session_start()関数が既に呼び出され、セッションが正常に開始されている状態です。セッション変数の読み書きが可能です。

session_status関数を利用することで、開発者はプログラム内で現在のセッション状態を正確に把握し、例えばセッションがまだ開始されていない場合にのみsession_start()を実行するといった、より堅牢で効率的なセッション管理のロジックを実装することができます。これにより、セッションに関する予期せぬエラーを防ぎ、アプリケーション全体の安定性と信頼性を向上させることが可能となります。

基本的な使い方

構文(syntax)

<?php

$status = session_status();

引数(parameters)

引数なし

引数はありません

戻り値(return)

int

セッションの状態を表す整数値を返します。利用可能な値は PHP_SESSION_DISABLED (0)、PHP_SESSION_NONE (1)、PHP_SESSION_ACTIVE (2) です。

サンプルコード

PHPセッション状態を確認する

<?php

/**
 * PHPのセッション状態を確認するサンプルコード。
 * session_status()関数は、セッションの現在の状態を整数値で返します。
 * 主な状態として、PHP_SESSION_NONE (1: セッションは有効だが未開始) と
 * PHP_SESSION_ACTIVE (2: セッションは有効で開始済み) があります。
 */
function displaySessionStatus(): void
{
    echo "--- セッション開始前の状態 ---" . PHP_EOL;

    // session_start() を呼び出す前のセッションの状態を確認
    $statusBefore = session_status();
    echo "session_status() の戻り値: " . $statusBefore . PHP_EOL;

    if ($statusBefore === PHP_SESSION_NONE) {
        echo "現在のセッション状態: PHP_SESSION_NONE (1) - セッションは有効ですが、開始されていません。" . PHP_EOL;
    } elseif ($statusBefore === PHP_SESSION_ACTIVE) {
        echo "現在のセッション状態: PHP_SESSION_ACTIVE (2) - セッションは有効で、開始されています。" . PHP_EOL;
    } elseif ($statusBefore === PHP_SESSION_DISABLED) {
        echo "現在のセッション状態: PHP_SESSION_DISABLED (0) - セッションは無効です。" . PHP_EOL;
    }

    echo PHP_EOL; // 空行

    echo "--- セッションを開始します ---" . PHP_EOL;
    // セッションを開始
    session_start();
    echo "session_start() を呼び出しました。" . PHP_EOL;

    echo PHP_EOL; // 空行

    echo "--- セッション開始後の状態 ---" . PHP_EOL;

    // session_start() を呼び出した後のセッションの状態を確認
    $statusAfter = session_status();
    echo "session_status() の戻り値: " . $statusAfter . PHP_EOL;

    if ($statusAfter === PHP_SESSION_NONE) {
        echo "現在のセッション状態: PHP_SESSION_NONE (1) - セッションは有効ですが、開始されていません。" . PHP_EOL;
    } elseif ($statusAfter === PHP_SESSION_ACTIVE) {
        echo "現在のセッション状態: PHP_SESSION_ACTIVE (2) - セッションは有効で、開始されています。" . PHP_EOL;
        // セッションがアクティブなので、セッション変数にアクセスできます。
        $_SESSION['user_id'] = 123;
        echo "セッション変数 '_SESSION[\"user_id\"]' を設定しました。" . PHP_EOL;
    } elseif ($statusAfter === PHP_SESSION_DISABLED) {
        echo "現在のセッション状態: PHP_SESSION_DISABLED (0) - セッションは無効です。" . PHP_EOL;
    }
}

// 関数を実行してセッションの状態を表示
displaySessionStatus();

session_status関数は、PHPのセッション機能が現在どのような状態にあるかを確認するために使用される関数です。引数は不要で、現在のセッションの状態を示す整数値を戻り値として返します。

この整数値は、主に以下の3つの定数で意味付けられています。PHP_SESSION_DISABLED(0)はセッションが無効になっている状態、PHP_SESSION_NONE(1)はセッション機能は有効ですがまだ開始されていない状態、そしてPHP_SESSION_ACTIVE(2)はセッションがすでに開始されており、利用可能な状態を示します。

サンプルコードでは、まずsession_start()関数を呼び出す前にsession_status()を実行し、セッションが開始されていないPHP_SESSION_NONE(1)の状態であることを確認しています。次にsession_start()でセッションを開始した後、再度session_status()を実行すると、セッションが開始されPHP_SESSION_ACTIVE(2)の状態に変化していることが示されます。セッションがアクティブな状態(2)になると、$_SESSIONのようなスーパーグローバル変数を通じてセッションデータの読み書きが可能になります。このように、この関数を使うことで、セッションの状態に応じて適切な処理を行うことができます。

session_status()関数は、PHPのセッションが現在どのような状態にあるかを整数値で返します。この戻り値は、直接数値で比較するのではなく、PHP_SESSION_NONE (1: セッション有効だが未開始)、PHP_SESSION_ACTIVE (2: セッション有効で開始済み)、PHP_SESSION_DISABLED (0: セッション無効) といった組み込み定数と比較することで、コードの可読性と堅牢性が向上します。セッション変数($_SESSION)にアクセスしたり設定したりする際は、必ず事前にsession_start()関数を呼び出し、session_status()PHP_SESSION_ACTIVEであることを確認してください。セッションが開始されていない状態で$_SESSIONに触れると、意図しないエラーや警告が発生する可能性があります。また、session_start()はスクリプト内で一度だけ呼び出すように注意が必要です。

PHP session_status() でセッション状態を確認する

<?php

/**
 * session_status() 関数の使用例を示します。
 * この関数は現在のセッションの状態を整数で返します。
 *
 * 戻り値は以下の定数と対応します:
 * PHP_SESSION_DISABLED (0): セッション機能が無効化されている
 * PHP_SESSION_NONE     (1): セッションは有効だが、現在のリクエストでセッションが開始されていない
 * PHP_SESSION_ACTIVE   (2): セッションは有効で、現在のリクエストでセッションが開始されている
 */
function demonstrateSessionStatus(): void
{
    echo "--- セッション開始前の状態確認 ---\n";

    // セッション開始前の session_status() の戻り値は通常 PHP_SESSION_NONE (1) となります。
    // これは、PHP のセッション機能自体は有効だが、このスクリプトでまだ session_start() が
    // 呼び出されていない状態を示します。
    $statusBeforeStart = session_status();
    echo "session_status() の最初の呼び出し結果: " . $statusBeforeStart . "\n";
    echo "PHP_SESSION_NONE の値: " . PHP_SESSION_NONE . "\n";

    if ($statusBeforeStart === PHP_SESSION_NONE) {
        echo "=> 現在、セッションは有効ですが、まだ開始されていません。\n";
        echo "   (session_status() は " . PHP_SESSION_NONE . " を返しました。)\n";
    }

    echo "\n--- セッション開始後の状態確認 ---\n";

    // session_start() を呼び出してセッションを開始します。
    // これにより、$_SESSION スーパーグローバル配列が利用可能になります。
    session_start();
    echo "session_start() を呼び出しました。\n";

    // session_start() 呼び出し後の session_status() の戻り値は PHP_SESSION_ACTIVE (2) となります。
    $statusAfterStart = session_status();
    echo "session_status() の2回目の呼び出し結果: " . $statusAfterStart . "\n";
    echo "PHP_SESSION_ACTIVE の値: " . PHP_SESSION_ACTIVE . "\n";

    if ($statusAfterStart === PHP_SESSION_ACTIVE) {
        echo "=> 現在、セッションは開始され、アクティブな状態です。\n";
        echo "   (session_status() は " . PHP_SESSION_ACTIVE . " を返しました。)\n";
    }

    // セッションがアクティブな場合、セッション変数に値を設定できます。
    if ($statusAfterStart === PHP_SESSION_ACTIVE) {
        $_SESSION['user_id'] = 123;
        echo "セッション変数 'user_id' に値を設定しました: " . $_SESSION['user_id'] . "\n";
    }

    echo "\n--- スクリプト終了 ---\n";
}

// 関数を実行します。
demonstrateSessionStatus();

?>

PHPのsession_status()関数は、現在のPHPセッションの状態を確認するための関数です。この関数は引数を取らず、セッションの状態を示す整数値を返します。戻り値の整数は、PHPの標準定数と対応しており、主に三つの状態を示します。セッション機能が無効化されている場合はPHP_SESSION_DISABLED (0)、セッションは有効ですがまだ開始されていない場合はPHP_SESSION_NONE (1)、セッションが開始されアクティブな状態の場合はPHP_SESSION_ACTIVE (2)です。

提供されたサンプルコードでは、この関数の具体的な挙動が示されています。session_start()関数を呼び出す前は、通常session_status()PHP_SESSION_NONE (1)を返します。これは、PHPのセッション機能自体は利用可能ですが、現在のリクエスト内でまだセッションが明示的に開始されていない状態を意味します。

次にsession_start()を呼び出してセッションを開始すると、その後のsession_status()の戻り値はPHP_SESSION_ACTIVE (2)となります。この状態になると、$_SESSIONというスーパーグローバル配列を通じてセッション変数にデータを保存したり、読み出したりすることが可能になります。例えば、ユーザーIDをセッションに保存するといった処理が行えます。session_status()関数は、ウェブアプリケーションでセッションの状態に応じて適切な処理を行うための分岐判断などで活用されます。

session_status()関数は、session_start()を呼び出す前にセッションの現在の状態を確認するために利用します。戻り値の整数はPHP_SESSION_DISABLEDPHP_SESSION_NONEPHP_SESSION_ACTIVEといった定数に対応しており、コードの可読性や将来的な互換性を考慮し、数値ではなくこれらの定数と比較することが推奨されます。

session_status()PHP_SESSION_NONE(1)を返しても、$_SESSIONスーパーグローバル変数を使用するには、明示的にsession_start()を呼び出す必要があります。session_start()はスクリプト内で一度しか実行できません。そのため、session_status() === PHP_SESSION_NONEで未開始であることを確認してからsession_start()を呼ぶことで、二重呼び出しによる警告を防ぎ、安全にセッションを管理できます。

【PHP8.x】session_status関数の使い方 | いっしー@Webエンジニア