そこで、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」フラグを使用できます。
しかし、私はそれを完全には理解していません。