セッション処理目次
SessionHandler クラスはじめに
SessionHandler は特殊なクラスで、
これを継承したクラスを作れば PHP が内部的に使っているセッション保存ハンドラを拡張できます。
このクラスには七つのメソッドがあり、それぞれが七つのセッション保存ハンドラコールバック
( SessionHandler のインスタンスを session_set_save_handler でハンドラとして指定すると、 そのインスタンスが現在の保存ハンドラをラップします。 SessionHandler を継承したクラスを作ると、 親クラスのメソッド、つまり PHP の内部セッションハンドラのメソッドをラップして オーバーライドしたり処理を割り込ませたりフィルタをかけたりできるようになります。
これを利用すると、たとえば SessionHandler は現在の内部保存ハンドラのメソッドをラップしているので、 先述の暗号化の例は任意の保存ハンドラに適用することができます。その際に、ハンドラの内部的な動きを知っておく必要はありません。 このクラスを使うには、まず最初に公開したいハンドラを session.save_handler で設定してから、 SessionHandler あるいはそれを継承したクラスのインスタンスを session_set_save_handler に渡します。 このクラスのコールバックメソッドは PHP が内部的にコールするものであり、 ユーザーのコードから呼ばれることは想定していないことに注意しましょう。 コールバックの戻り値も、PHP が内部的に利用するだけです。 セッションの処理の流れについての詳しい情報は session_set_save_handler を参照ください。 クラス概要
SessionHandler
implements
SessionHandlerInterface
SessionIdInterface
/* メソッド */
public bool close()
public string create_sid()
public bool destroy(string
$id )public intfalse gc(int
$max_lifetime )public bool open(string
$path , string $name )public stringfalse read(string
$id )public bool write(string
$id , string $data )警告
このクラスは現在の PHP 内部セッション保存ハンドラを公開するように作られています。 自作の保存ハンドラを用意したい場合は、SessionHandler を継承するのではなく SessionHandlerInterface を実装したクラスを作るようにしましょう。 例1 SessionHandler を使って PHP の保存ハンドラに暗号化機能を追加する例
<?php
SessionHandlerInterface クラスはじめにSessionHandlerInterface は カスタムセッションハンドラを作成する際の最低限のプロトタイプを定義したインターフェイスです。 自作のセッションハンドラを オブジェクト指向型 の起動方法で session_set_save_handler に渡すために、このインターフェイスを実装することができます。 このクラスのコールバックメソッドは PHP が内部的にコールするものであり、 ユーザーのコードから呼ばれることは想定していないことに注意しましょう。 インターフェイス概要
SessionHandlerInterface
/* メソッド */
public bool SessionHandlerInterface::close()
public bool SessionHandlerInterface::destroy(string
$id )public intfalse SessionHandlerInterface::gc(int
$max_lifetime )public bool SessionHandlerInterface::open(string
$path , string $name )public stringfalse SessionHandlerInterface::read(string
$id )public bool SessionHandlerInterface::write(string
$id , string $data )例1 SessionHandlerInterface の使用例
この例では、ファイルベースのセッションストレージをつくります。これは
PHP のデフォルトのセッション保存ハンドラである session_set_save_handler でオブジェクト指向型のプロトタイプを使っていることと、 シャットダウン関数をその parameter フラグで登録していることに注目しましょう。 オブジェクトをセッション保存ハンドラとして使うときには、この方法をおすすめします。 警告
コードを簡潔にするため、以下の例では入力値の検証を省略しています。
しかし、
<?php SessionIdInterface クラスはじめにSessionIdInterface は カスタムのセッションハンドラを作成するためのオプションのメソッドを定義します。 オブジェクト指向型 の呼び出しを使い、 カスタムのセッションハンドラを session_set_save_handler に渡すために、 このインターフェイスを実装することができます。 このクラスのコールバックメソッドは PHP が内部的にコールするものであり、 ユーザーのコードから呼ばれることは想定していないことに注意しましょう。 インターフェイス概要
SessionIdInterface
/* メソッド */
public string SessionIdInterface::create_sid()
SessionUpdateTimestampHandlerInterface クラスはじめにSessionUpdateTimestampHandlerInterface は カスタムセッションハンドラを作成する際の最低限のプロトタイプを定義したインターフェイスです。 自作のセッションハンドラを オブジェクト指向型 の起動方法で session_set_save_handler に渡すために、このインターフェイスを実装することができます。 このクラスのコールバックメソッドは PHP が内部的にコールするものであり、 ユーザーのコードから呼ばれることは想定していないことに注意しましょう。 クラス概要
SessionUpdateTimestampHandlerInterface
/* メソッド */
public bool SessionUpdateTimestampHandlerInterface::updateTimestamp(string
$id , string $data )public bool SessionUpdateTimestampHandlerInterface::validateId(string
$id ) |