FuelPHP1.2のSessionでハマった

どうやら原因は他の所にあった感じなので、この記事を参考にしないでください。

Session::keep_flash()  

上記を使用してもset_flashしたものが維持されないまま削除されてしまう問題に当たった。

原因は、config.phpのprofiling => trueだった。

プロファイリングを使用するとDBクエリや実行時間など色々な情報を出力してくれるが、
これが原因でセッションのインスタンスが複数生成されてしまい、
keep_flashを設定しても有効に削除されてしまう。

だから、keep_flash()の検証をする際は、profiling => falseでね。

configs/session.phpのflash_auto_expireをfalseにすると勝手に消えなくなるが、根本原因は先程のべたほう。

ついでに、fuelphpのsession周りのソースを読んだのでメモっとく。

set_flashをすると、stateがnewでSessionクラスのプロパティに保持される。
get_flashをすると、Sessionクラスのプロパティから読み込んで、stateをoldにする。(flashは一度きりだから)
keep_flashをすると、stateをnewに戻す。

最後に実際にSessionに書き込むときに、クリーンナップが実行され、stateがoldのデータをunsetする。

flash_auto_expireを実行すると、インスタンス生成時にoldを削除する。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です