とある日の妄想モバイル - PHP・キャッシュ対策考
2007年04月05日(木)
Webアプリ作ってるとキャッシュに悩まされることが結構ある。
まずPHPの場合は、session_chache_limiterでキャッシュを
残すか残さないかの設定をする。
・キャッシュを残さない設定
session_cache_limiter("nocache");
・キャッシュを残す設定
session_cache_limiter("private_no_expire");
キャッシュに悩まされる原因の1つめは、更新が反映されないというものだ。
これは、キャッシュをブラウザが表示してしまうことによる。
そのため、更新を常に反映したいページはnocacheの設定にするのが基本だ。
nocacheにすると、まったくキャッシュが残らないかといえばそうでもない。
具体的仕様がよくわからないのだけど、nocacheのページへ
・送信メソッド「GET」での画面遷移→キャッシュが残る
・送信メソッド「POST」での画面遷移→キャッシュが残らない
という動作がいくつかのブラウザで現実に起こっている。
なので、nocacheに指定したページでも、リンクなどから移動する場合は
urlの末尾にランダムな文字列を付加して新しいURLとブラウザに認識させ、
WEBページをサーバに取りに行かせるようにしないと、キャッシュが表示される。
POST送信されたnocacheのページは、確かにまったくキャッシュされない。
しかし、これはこれで問題を抱えることになる。
ブラウザの「戻る」ボタンやJavaScriptのhistory.back()などで
POST送信で表示されたnocacheのページに戻ろうとすると、
IEなどでは「ページの有効期限切れ」という意味を理解しづらい、
エラー画面のような白いページが表示されてしまう。
これがキャッシュ問題の2つめの悩みだ。
また、ファイルアップロードなどで遷移した画面は強制的にnocacheになり、
ブラウザの「戻る」などで戻ることができない。
ブラウザの戻るボタンの動作はしばしば、二重送信などの不具合の原因にもなる。
サイトによっては、ナビゲーションのないウィンドウを使わせたりしてるね。
新しいWeb(2.0)ではこういう悩みも少なくなってくはずなんだけど。
まだまだ、Webはこれからだな。
0.戻る
©2001-2009 konkon All Rights Reserved.