session_start

新しいセッションを開始、あるいは既存のセッションを再開する

説明

bool session_start(array $options = [])

session_start は、セッションを作成します。 もしくは、リクエスト上で GET, POST またはクッキーにより渡されたセッション ID に基づき現在のセッションを復帰します。

session_start がコールされたりセッションが自動的に開始したりするときに、 PHP はセッションの open ハンドラおよび read ハンドラをコールします。 このハンドラとしては、デフォルトで組み込まれている保存ハンドラの他に PHP 拡張モジュールで提供されているもの (SQLite や Memcached など) も使えます。また、自作のハンドラを session_set_save_handler で定義することもできます。 read コールバックは既存のセッションデータ (独自のシリアライズフォーマットで保存されているもの) を読み込み、 それを復元して自動的にスーパーグローバル $_SESSION に格納します。

名前付きのセッションを使用したい場合、 session_start の前に session_name をコールする必要があります。

session_start は、 session.use_trans_sid が有効の場合に URL 書換え用の内部出力ハンドラを登録します。

ユーザーが ob_start と共に ob_gzhandler または類似のものを使用している場合、 出力ハンドラの順番は正しく出力を行うために重要です。例えば、 セッション開始時にユーザーは ob_gzhandler を登録する必要があります。

パラメータ

options

オプションの連想配列を指定することができます。これは、現在設定されている セッションの設定ディレクティブ を上書きします。 連想配列のキーにはプレフィックス session. を含めてはいけません。

通常の設定ディレクティブ群に加えて、 read_and_close オプションを指定することもできます。 これを true にすると、セッションを読み込んだらその場ですぐにクローズします。 セッションのデータを書き換えるつもりがない場合は、こうしておけば、意図せぬロックを防げます。

戻り値

この関数は、セッションが正常に開始した場合に true、それ以外の場合に false を返します。

変更履歴

バージョン 説明
7.1.0 セッションを開始できなかった場合、 session_start は、false を返し、 $_SESSION を初期化しないようになりました。

基本的なセッションの例

例1 page1.php

<?php
// page1.php

session_start();

echo 'Welcome to page #1';

$_SESSION['favcolor'] = 'green';
$_SESSION['animal']   = 'cat';
$_SESSION['time']     = time();

// セッションクッキーが有効なら動作します
echo '<br /><a href="page2.php">page 2</a>';

// あるいは必要に応じてセッション ID を渡します
echo '<br /><a href="page2.php?' . SID . '">page 2</a>';
?>

page1.php を表示した後なら、 page2.php はセッション上の情報を含んでいるはずです。 セッションについてのリファレンス を読むと、 セッションIDの伝達 に関する情報が得られます。 例えば、SID とは何かといったことです。

例2 page2.php

<?php
// page2.php

session_start();

echo 'Welcome to page #2<br />';

echo $_SESSION['favcolor']; // green
echo $_SESSION['animal'];   // cat
echo date('Y m d H:i:s', $_SESSION['time']);

// page1.php と同様に、ここで SID を使うこともできます
echo '<br /><a href="page1.php">page 1</a>';
?>

session_start のオプションの指定

例3 クッキーの有効期限の上書き

<?php
// これは、有効期限が1日の永続クッキーを送信します
session_start([
    'cookie_lifetime' => 86400,
]);
?>

例4 セッションの読み込みとクローズ

<?php
// セッション内で何も変更する必要がないことがわかっている場合は、
// セッションを読み込んですぐにクローズしてしまえば、
// セッションファイルをロックして他のページをブロックしてしまうことを防げます
session_start([
    'cookie_lifetime' => 86400,
    'read_and_close'  => true,
]);

注意

注意:

クッキーに基づくセッションを使用している場合、ブラウザに何か出力を行う前に session_start をコールする必要があります。

注意:

ob_gzhandler よりも zlib.output_compression の使用が推奨されています。

注意:

この関数は、設定によって複数の HTTP ヘッダを送信します。 これらのヘッダをカスタマイズするには session_cache_limiter を参照ください。

参考