# セッション処理

# はじめに

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() 関数により開始されている場合でも当てはまります。

- インストール/設定
  - 要件
  - インストール手順
  - 実行時設定
- 定義済み定数
- 例
  - 基本的な使用法
  - セッションIDの受渡し
  - カスタムセッションハンドラ
- セッションのアップロード状況
- セッション と セキュリティ
  - セッション管理の基礎
  - セッションに関連する INI 設定をセキュアにする
- セッション関数
  - session_abort — session 配列の変更を破棄してセッションを終了する
  - session_cache_expire — 現在のキャッシュの有効期限を取得/設定する
  - session_cache_limiter — 現在のキャッシュリミッタを取得または設定する
  - session_commit — session_write_close のエイリアス
  - session_create_id — 新しいセッションIDを作成する
  - session_decode — セッションエンコードされた文字列からセッションデータをデコードする
  - session_destroy — セッションに登録されたデータを全て破棄する
  - session_encode — 現在のセッションデータを、セッションエンコードされた文字列に変換する
  - session_gc — セッションデータのガベージコレクションを実行する
  - session_get_cookie_params — セッションクッキーのパラメータを得る
  - session_id — 現在のセッション ID を取得または設定する
  - session_module_name — 現在のセッションモジュールを取得または設定する
  - session_name — 現在のセッション名を取得または設定する
  - session_regenerate_id — 現在のセッションIDを新しく生成したものと置き換える
  - session_register_shutdown — セッションのシャットダウン関数
  - session_reset — session 配列を元の値で再初期化する
  - session_save_path — 現在のセッションデータ保存パスを取得または設定する
  - session_set_cookie_params — セッションクッキーパラメータを設定する
  - session_set_save_handler — ユーザー定義のセッション保存関数を設定する
  - session_start — 新しいセッションを開始、あるいは既存のセッションを再開する
  - session_status — 現在のセッションの状態を返す
  - session_unset — 全てのセッション変数を開放する
  - session_write_close — セッションデータを書き込んでセッションを終了する
- SessionHandler — SessionHandler クラス
  - SessionHandler::close — セッションを閉じる
  - SessionHandler::create_sid — 新規セッション ID を返す
  - SessionHandler::destroy — セッションを破棄する
  - SessionHandler::gc — 古いセッションを削除する
  - SessionHandler::open — セッションを開始する
  - SessionHandler::read — セッションのデータを読み込む
  - SessionHandler::write — セッションのデータを書き込む
- SessionHandlerInterface — SessionHandlerInterface クラス
  - SessionHandlerInterface::close — セッションを閉じる
  - SessionHandlerInterface::destroy — セッションを破棄する
  - SessionHandlerInterface::gc — 古いセッションを削除する
  - SessionHandlerInterface::open — セッションを開始する
  - SessionHandlerInterface::read — セッションのデータを読み込む
  - SessionHandlerInterface::write — セッションのデータを書き込む
- SessionIdInterface — SessionIdInterface クラス
  - SessionIdInterface::create_sid — セッションIDを作成する
- SessionUpdateTimestampHandlerInterface — SessionUpdateTimestampHandlerInterface クラス
  - SessionUpdateTimestampHandlerInterface::updateTimestamp — タイムスタンプを更新する
  - SessionUpdateTimestampHandlerInterface::validateId — セッションIDを検証する

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open