セッションIDの受渡し
セッションのアップロード状況
例
PHP Manual

## カスタムセッションハンドラ

セッション情報をデータベースに保存する機能か他の保存法を実装するには、 一連のユーザーレベルの保存関数を作成し、 session_set_save_handler()を使用する必要があります。 PHP 5.4.0 以降では、SessionHandlerInterface を使ったり、SessionHandler を継承して PHP の内部セッションハンドラを拡張したりしてセッションハンドラを作成できます。

session_set_save_handler() で指定したコールバックメソッドが、 セッションのライフサイクル内で PHP からコールされます。 セッションの `open`、`read`、`write`、 `close`、そしてセッションの削除 (`destroy`) や定期的なガベージコレクション (`gc`) などのときです。

したがって、PHP では常にセッション保存ハンドラが必要となります。デフォルトは、通常はファイルベースの保存ハンドラです。 自作の保存ハンドラは session_set_save_handler() で設定できます。 内部的な保存ハンドラとして、デフォルト以外のものも PHP の拡張モジュールとして用意されています。 `sqlite` や `memcache` そして `memcached` などで、これらは session.save_handler で設定できます。

セッションが開始するときに、PHP は内部的に `open` ハンドラをコールします。 それに続けて `read` コールバックを実行し、 このコールバックがエンコードされた文字列を返します。これは最初にセッションストレージに渡されたものと同じ形式になります。 `read` コールバックがエンコードした文字列を返したら、 PHP がそれをデコードしてデコード後の配列をスーパーグローバル $_SESSION に格納します。

PHP のスクリプトが終了するとき (あるいは session_write_close() がコールされたとき) には、 PHP が内部的にスーパーグローバル $_SESSION をエンコードします。 そして、それをセッション ID とともに `write` コールバックに渡します。 `write` コールバックが終了すると、PHP は内部的に `close` コールバックハンドラを実行します。

セッションが明確に破棄されたときには、PHP は `destroy` ハンドラをセッション ID つきでコールします。

PHP はときどき `gc` コールバックを実行し、 設定されているセッション有効期限にもとづいて期限切れのセッションレコードを無効化します。 この処理では、最後にアクセスされてからの時間が `$lifetime` を超えているすべてのレコードを永続ストレージから削除しなければなりません。

セッションIDの受渡し
セッションのアップロード状況
例
PHP Manual