はじめに
PHPのセッションサポート機能は、複数回のアクセスを通じて特定のデータを保持する手段を実現するものです。
Web サイトの訪問者にはセッションIDというセッションIDと呼ばれるユニークなIDが割りつけられ ます。このIDは、ユーザー側にクッキーとして保存するか、または、URL に埋め込みます。
セッションサポート機能により、スーパーグローバル配列
$_SESSION
を使ってリクエスト間でデータを格納できるようになります。
来訪者がサイトにアクセスした際、
PHP は特定のセッションIDがリクエストとともに送信されているかどうかを
(
session.auto_start
が1の場合は)自動的に、または
(session_start() により明示的な)
要求を受けて確認します。
このIDが送信されている場合には、以前保存された変数が再現されます。
session.auto_start をオンにした場合にオブジェクトをセッションに代入する唯一の方法は、 クラスの定義を auto_prepend_file でロードしておき、オブジェクトを serialize() したうえで後で unserialize() することです。
$_SESSION (およびそこに登録されたすべての変数) は、リクエストが終了したときに PHP が内部的にシリアライズします。 シリアライズの方式として、ini 設定 session.serialize_handler で指定したハンドラを使います。 未定義の登録変数は、未定義としてマーク付けされます。 これらの変数は、後でユーザーが定義しない限り、以降のアクセスにおいて セッションモジュールにより定義されません。
セッションデータはシリアライズされるので、 resource 型の変数はセッションに格納できません。
シリアライズハンドラ (php
および php_binary
) は、register_globals
の制約を引き継いでいます。
そのため、数値のインデックスや特殊文字 (|
や !
) を含む文字列のインデックスは使えません。
これらを使っていると、スクリプトのシャットダウン時にエラーが発生します。
php_serialize
には、そのような制約はありません。
注意:
セッションを処理している時、 スーパーグローバル配列$_SESSION へ新しいキーを 追加して変数が登録されるまで、 セッションのレコードは作成されないことに注意してください。 これは、セッションが session_start() 関数により開始されている場合でも当てはまります。