session_start
新しいセッションを開始、あるいは既存のセッションを再開する
説明
bool session_start(array $options
= [])
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
を返します。
例
基本的なセッションの例
例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 を参照ください。