今日もまた踏みました

非定期更新:主に何とも言えない事態にあった際に更新しています

Fuel + Redis で Session に入れた値が壊れた

(この事件は2013年10月後半に起きました)

Fuel の Controller から、View へ値を渡す時にオブジェクトを利用して渡していた

同じオブジェクトを Session に入れて、後から再利用しようとしていたのだが、そちらで取得すると「α」とかの文字が「α」とかに変わってしまっている

Redis に送る所が悪いのかとか色々調べてみたのだが、Fuel で Redis を使っている場合は下記の様に処理が行われるらしい

1. Controller でオブジェクトに値を設定 (この時点でSessionにも設定)
2. View でオブジェクトを処理
3. Redis へ送信

実に問題だったのが、2 の View の部分
View に出力するため、\View::forge を実行している訳なのだが、この処理ではオブジェクトのプロパティに対して処理を行い値を書き戻している

その為、3 の Redis への送信時点では、既にエスケープ処理されていて、次の所で Session から取得した時にはエスケープ処理済みが取得されていたようだ

色々と物騒なので、View に渡すオブジェクトは全て Clone する事にした