Ethnaで表示したページをブラウザの戻るボタンを使って戻ると、クライアント側でキャッシュしたページが表示されて、最新の状態とは異なる場合が発生。
まあ、そうだろうなって感じの挙動なんだけど、PHPのsession_cache_limiterって関数でその辺のキャッシュ絡みを制御できる模様。
んーそうなのかー。
こっちとしては、ブラウザの戻るボタンで戻った時のことまで考えてられるかって感じなんだけど、そうも言ってられないのかね。
でもまあ、この辺の挙動はブラウザの設定もあるだろうから、微妙なとこだろうな。
んで調べたらPHPのフレームワーク『Ethna』徹底解説 - GREE Labs
にこんなことが書いてあった。
次の手順ってのが、こちら。
※ちょこちょこおかしなところがあったので、微修正してあるソース。
アプリ用のセッションクラスを用意して、それを使用するようにコントローラーに追加。
Ethnaのセッション周りは癖があるので、自前のセッションクラスを用意するってのは妥当かもしれないなあ。
これにて一件落着・・・。
まあ、そうだろうなって感じの挙動なんだけど、PHPのsession_cache_limiterって関数でその辺のキャッシュ絡みを制御できる模様。
んーそうなのかー。
こっちとしては、ブラウザの戻るボタンで戻った時のことまで考えてられるかって感じなんだけど、そうも言ってられないのかね。
でもまあ、この辺の挙動はブラウザの設定もあるだろうから、微妙なとこだろうな。
んで調べたらPHPのフレームワーク『Ethna』徹底解説 - GREE Labs
にこんなことが書いてあった。
Ethnaでは,session_cache_limiterで,「private, must-revalidate」に設定されているため,ブラウザのキャッシュが通常のPHPでセッションを使った場合の動作とやや違う場面があります. Ethnaで設定されているもののほうが,ブラウザがコンテンツキャッシュを行ってくれるので便利なことが多いのですが,nocacheに指定したい場合などには次の手順で修正することによって処理を変更することができます.
次の手順ってのが、こちら。
※ちょこちょこおかしなところがあったので、微修正してあるソース。
// Hoge_Session.php
class Hoge_Session extends Ethna_Session{
function Ethna_SessionSample($appid, $save_dir, $logger) {
parent::Ethna_Session($appid, $save_dir, $logger);
session_cache_limiter('nocache');
}
}// Hoge_Controller.php
+require_once 'Sample_Session';
...(省略)...
var $class = array(
...(省略)...
- 'session' => 'Ethna_Session',
+ 'session' => 'Sample_Session',
'sql' => 'Ethna_AppSQL',
'view' => 'Ethna_ViewClass',
);アプリ用のセッションクラスを用意して、それを使用するようにコントローラーに追加。
Ethnaのセッション周りは癖があるので、自前のセッションクラスを用意するってのは妥当かもしれないなあ。
これにて一件落着・・・。