(PHP 4、PHP 5、PHP 7、PHP 8)
session_set_save_handler - ユーザー定義のセッションストレージ機能を設定します
説明します
session_set_save_handler( callable $open, callable $close, callable $read, callable $write, callable $destroy, callable $gc, callable $create_sid = ?, callable $validate_sid = ?, callable $update_timestamp = ? ): bool
次の方法を使用して、カスタムセッションストレージ機能を登録できます。
session_set_save_handler(object $sessionhandler, bool $register_shutdown = true): bool
session_set_save_handler()ユーザー定義のセッションストレージ関数を設定します。 PHPの組み込みセッションストレージメカニズム以外の方法を使用する場合は、この機能を使用できます。たとえば、セッションストレージ機能をカスタマイズして、セッションデータをデータベースに保存できます。
パラメータこの関数には2つのプロトタイプがあります。
SessionHandler
Session HandlerInterface、SessionIdinterface(オプション)、および/またはSessionUpDateTimestamphandlerInterfaceインターフェイスをsessionhandlerなどを実装するオブジェクト。
Register_shutdown
function session_write_close()をRegister_shutdown_function()関数として登録します。
または
open(string $ savepath、string $ sessionname)
次の署名コール可能なコールバックが実装されています。
open(string $savePath, string $sessionName): bool
オープンコールバック関数はクラスコンストラクターに似ており、セッションが開かれたときに呼び出されます。これは、Session_start()を呼び出すことにより、セッションを自動的にまたは手動で開始する最初のコールバック関数です。このコールバック関数の操作は、trueを正常に返します。
近い
クローズコールバック関数は、クラスのデストラクタに似ています。書き込みコールバック関数が呼び出された後に呼び出されます。 Closeコールバック関数は、session_write_close()関数が呼び出された後にも呼び出されます。このコールバック関数の操作は、trueを正常に返します。
読む
次の署名コール可能なコールバックが実装されています。
read(string $sessionId): string
セッションにデータがある場合、読み取りコールバック関数は、セッションデータのエンコード(シリアル化された)文字列を返す必要があります。セッションにデータがない場合、読み取りコールバック関数は空の文字列を返します。
Session_start()関数を呼び出してセッションを自動的に開始するか、セッションを手動で開始した後、PHPは読み取りコールバック関数を内部的に呼び出してセッションデータを取得します。 PHPは、readを呼び出す前にオープンコールバック関数を呼び出します。
読み取りコールバックによって返されるシリアル化された文字列形式は、書き込みコールバックがデータを保存するときに形式とまったく同じでなければなりません。 PHPは、返された文字列を自動的に脱必要にし、$ _Session Super Global変数で埋めます。データはSerialize()関数に非常に似ていますが、それらが異なることに注意する必要があります。参照してください:session.serialize_handler。
書く
次の署名コール可能なコールバックが実装されています。
write(string $sessionId, string $data): bool
セッションがデータを保存したときに、書き込みコールバック関数が呼び出されます。このコールバック関数は、$ _Sessionでのデータシリアル化後の現在のセッションIDと文字列をパラメーターとして使用します。セッションデータのシリアル化プロセスは、Session.Serialize_Handlerの設定値に基づいてPHPによって完了します。
シリアル化されたデータは、ストレージのセッションIDに関連付けられます。データを取得するために読み取りコールバック関数が呼び出される場合、返されたデータは、書き込みコールバック関数に渡されたデータと完全に一致する必要があります。
PHPは、スクリプトが実行された後、またはsession_write_close()関数が呼び出された後にこのコールバック関数を呼び出します。このコールバック関数を呼び出すと、Close Callback関数はPHPで内部的に呼び出されることに注意してください。
知らせ:
PHPは、出力ストリームが書き込まれて閉じた後にのみ、書き込みコールバック関数を呼び出すため、書き込みコールバック関数のデバッグ情報はブラウザに出力されません。書き込みコールバック関数でデバッグ出力を使用する必要がある場合は、ファイルにデバッグ出力を書き込むことをお勧めします。
破壊する
次の署名コール可能なコールバックが実装されています。
destroy(string $sessionId): bool
このコールバック関数は、session_destroy()関数が呼び出されるとき、またはsession_regenerate_id()関数が呼び出され、破壊パラメーターがtrueに設定されたときに呼び出されます。このコールバック関数の操作は、trueを正常に返します。
GC
次の署名コール可能なコールバックが実装されています。
gc(int $lifetime): bool
セッションで古いデータをクリーンアップするために、PHPはGarbage Collection Callback関数を随時呼び出します。コールサイクルは、session.gc_probabilityとsession.gc_divisorパラメーターによって制御されます。このコールバック関数に渡された生涯パラメーターは、session.gc_maxlifetimeによって設定されます。このコールバック関数の操作は、trueを正常に返します。
create_sid
次の署名コール可能なコールバックが実装されています。
create_sid(): string
新しいセッションIDが必要な場合、このコールバック関数を実行します。呼び出されたときにパラメーターを渡すことはなく、その返品値は文字列形式の有効なセッションIDである必要があります。
validate_sid
次の署名コール可能なコールバックが実装されています。
validate_sid(string $key): bool
session.use_strict_modeを開いた後、このコールバックは、セッションIDが提供されるときにセッションが開始されるときに実行されます。パラメーターキーは、検証するセッションIDです。このIDのセッションがすでに存在する場合、それは有効なセッションIDです。収益値は成功すると真であり、失敗時に虚偽である必要があります。
update_timestamp
次の署名コール可能なコールバックが実装されています。
update_timestamp(string $key, string $val): bool
セッションを更新するときにこのコールバックを実行します。パラメーターキーはセッションIDです。パラメーターValはセッションデータです。収益値は成功すると真であり、失敗時に虚偽である必要があります。
返品値?
成功して真実であるか、失敗にfalseを返します。
例?
例#1カスタムセッションハンドラー:完全なコードについては、SessionHandlerInterfaceを参照してください。
通話方法のみがここにリストされています。完全なコードについては、sessionhandlerinterfaceを参照してください。
ここでは、session_set_save_handler()関数のOOPプロトタイプが使用され、2番目のパラメーターを使用してシャットダウン関数を登録します。これは、オブジェクトをセッション保存ハンドラーとして登録するときに推奨されます。
<?php class MySessionHandler implements SessionHandlerInterface { // 在这里实现接口} $handler = new MySessionHandler(); session_set_save_handler($handler, true); session_start(); // 现在可以使用$_SESSION 保存以及获取数据了
コメント警告:オブジェクトが破壊された後、書き込みおよび閉鎖関数は呼び出されません。したがって、これら2つのコールバック関数ではオブジェクトを使用することも、例外もスローできません。例外が関数にスローされた場合、PHPはそれをキャッチしたり追跡したりしないため、プログラムが異常に終了します。ただし、オブジェクトデストラクタはセッションを使用できます。
この問題を解決するために、Destructorでsession_write_close()関数を呼び出すことができます。ただし、シャットダウンコールバック関数を登録することは、より信頼性の高い方法です。
警告スクリプトが終了した後にセッションが閉じられた場合、一部のSAPIの現在の作業ディレクトリが変更された可能性があります。 session_write_close()関数を呼び出して、スクリプトの実行が終了する前にセッションを閉じることができます。