5

そこで、SessionhandlerInterfaceを実装するクラスを作成し、それをセッションハンドラーとして設定しました。

$sessionHandler = new SessionHandler();
session_set_save_handler($sessionHandler);
session_start();

問題は、書き込み関数が呼び出されないことです。

session_set_save_handlerの2番目のパラメーターを使用し、それをfalseに設定した場合:

session_set_save_handler($sessionHandler, false);

その後、正しく動作します。誰かが私にこの振る舞いを説明できますか?PHP5.4.6を使用しています。

ドキュメントには次のように書かれています。

オブジェクトをセッション保存ハンドラーとして使用する場合、PHPがシャットダウン時にオブジェクトを内部的に破棄する方法による予期しない副作用を回避し、書き込みとクローズが呼び出されないようにするために、シャットダウン関数をPHPに登録することが重要です。通常、register_shutdown_function()関数を使用して「session_write_close」を登録する必要があります。

PHP 5.4.0以降では、session_register_shutdown()を使用するか、OOPメソッドを使用してsession_set_save_handler()を呼び出し、SessionHandlerInterfaceを実装するインスタンスを渡すときに「registershutdown」フラグを使用できます。

しかし、私はそれを完全には理解していません。

4

1 に答える 1

3

ドキュメントには次のように記載されています。

「書き込み」ハンドラは、出力ストリームが閉じられるまで実行されません。したがって、「書き込み」ハンドラのデバッグ ステートメントからの出力は、ブラウザには表示されません。デバッグ出力が必要な場合は、代わりにデバッグ出力をファイルに書き込むことをお勧めします。

シンプルなecho.

于 2012-09-25T14:11:43.323 に答える