SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【php】セッションを開始しているかどうか判定する

問題

phpで、session_start()しているかどうか判別可能でしょうか。

答え

php5.4以降では、session_status()関数が使える。

セッションを開始していなかったら開始する例

if (session_status() == PHP_SESSION_NONE) {
    // セッションは有効で、開始していないとき
    session_start();
}

php5.3以前では、セッションを開始していないと session_id() で空文字が返ってくるのを利用できる。

if(session_id() == '') {
    // セッションは開始していない
    // ので、開始する
    session_start();
}

細かい注意

session_start() しないで session_id(‘test’) などした場合、session_id() 空文字を返さなくなるので、場合によっては session_id()を使う方法では正しく判定できないこともありうる。

session_status() を使うほうが正確。

できるだけ session_status()を使い、php5.3以前も考慮した例

if ((function_exists('session_status')
        && session_status() !== PHP_SESSION_ACTIVE) || !session_id()) {
    session_start();
}

関連するメモ

コメント