とある日の妄想モバイル - PHP・キャッシュ対策考

0.戻る

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.