関数の説明
session_set_save_handler 関数は、ユーザー定義のセッション ストレージを設定するために使用されます。
PHP の組み込みセッション保存メカニズム以外のメソッドを使用したい場合は、この関数を使用できます。 たとえば、セッション ストレージ機能をカスタマイズして、セッション データをデータベースに保存できます。
使い方
bool session_set_save_handler ( callable $open , callable $close , callable $read , callable $write , callable $destroy , callable $gc [, callable $create_sid ] )
PHP 5.4 バージョン以降では、さらに多くのものが使用できますセッションストレージ設定を直接カスタマイズするための簡単なパラメータ:
bool session_set_save_handler (SessionHandlerInterface $sessionhandler [, bool $register_shutdown = true ] )
パラメータの説明
このパラメータには 2 つのプロトタイプがあります:
最初のプロトタイプ (PHP 5.4 以降のバージョンが利用可能)
sessionhandler
SessionHandlerInterface インターフェイスを実装するオブジェクト このオブジェクトをカスタマイズすることも、公式に提供されている SessionHandler
register_shundown
を使用して、関数 session_write_close() を register_shutdown_function() 関数として登録することもできます。
2 番目のプロトタイプは次のとおりです:
open(string $savePath, string $sessionName)
open コールバック関数はクラスのコンストラクターに似ており、セッションが開かれるときに呼び出されます。 これは、session_start() を呼び出して自動的または手動でセッションを開始した後に呼び出される最初のコールバック関数です。 このコールバック関数は、操作が成功した場合は true を返し、そうでない場合は false を返します。
close()
close コールバック関数はクラスのデストラクターに似ています。 書き込みコールバック関数が呼び出された後に呼び出されます。 session_write_close() 関数が呼び出されると、close コールバック関数も呼び出されます。 このコールバック関数は、操作が成功した場合は true を返し、そうでない場合は false を返します。
read(string $sessionId)
セッションにデータがある場合、読み取りコールバック関数はセッション データをエンコード (シリアル化) する文字列を返す必要があります。 セッションにデータがない場合、読み取りコールバック関数は空の文字列を返します。
セッションを自動的に開始した後、または session_start() 関数を呼び出して手動でセッションを開始した後、PHP は内部で読み取りコールバック関数を呼び出してセッション データを取得します。 read を呼び出す前に、PHP は open コールバック関数を呼び出します。
読み取りコールバックによって返されるシリアル化された文字列形式は、書き込みコールバック関数がデータを保存するときの形式とまったく同じである必要があります。 PHP は、返された文字列を自動的に逆シリアル化し、$_SESSION スーパー グローバル変数に値を設定します。 データは Serialize() 関数に非常によく似ていますが、異なるものであることを覚えておくことが重要です。
write(string $sessionId, string $data)
書き込みコールバック関数は、セッションがデータを保存するときに呼び出されます。 このコールバック関数は、現在のセッション ID と、$_SESSION 内のデータのシリアル化後の文字列をパラメーターとして受け取ります。 session.serialize_handler の設定値に従って、セッションデータのシリアル化処理が PHP によって完了します。
シリアル化されたデータはセッションIDに関連付けられて保存されます。 読み取りコールバック関数を呼び出してデータを取得する場合、返されるデータは書き込みコールバック関数に渡されたデータと完全に一致している必要があります。
PHP は、スクリプトの実行後、または session_write_close() 関数の呼び出し後に、このコールバック関数を呼び出します。 このコールバック関数を呼び出した後、PHP は内部で close コールバック関数を呼び出すことに注意してください。
注:
PHP は、出力ストリームが書き込まれて閉じられるまで書き込みコールバック関数を呼び出しません。そのため、書き込みコールバック関数内のデバッグ情報はブラウザーに出力されません。 書き込みコールバック関数でデバッグ出力を使用する必要がある場合は、デバッグ出力をファイルに書き込むことをお勧めします。
destroy($sessionId)
このコールバック関数は、session_destroy() 関数が呼び出されたとき、または session_regenerate_id() 関数が呼び出されて destroy パラメータが true に設定されたときに呼び出されます。このコールバック関数は、操作が成功した場合は true を返し、そうでない場合は false を返します。
gc($lifetime)
セッション内の古いデータをクリーンアップするために、PHP は時々ガベージ コレクション コールバック関数を呼び出します。 呼び出しサイクルは、session.gc_probability および session.gc_divisor パラメーターによって制御されます。 このコールバック関数に渡されるライフタイム パラメータは、session.gc_maxlifetime によって設定されます。 このコールバック関数は、操作が成功した場合は true を返し、そうでない場合は false を返します。
create_sid()
新しいセッションIDが必要なときに呼び出されるコールバック関数。 コールバック関数はパラメータを渡さずに呼び出され、その戻り値は文字列形式の有効なセッション ID である必要があります。
戻り値
成功した場合は true を返し、失敗した場合は false を返します。
上記は、Note 017 PHP の session_set_save_handler() 関数の内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。