今日こそは
昨日早く寝て,その分早起きしようと思ったのに,昨日4時間しか寝てないのを取り返すべく10時間くらい寝てしまう罠.
session
phpのsessionを使っているのだが,ブラウザの戻るボタンで戻ろうとすると
警告 : ページの有効期限切れ
要求したページは、フォームで送信された情報を使用して作成されました。このページは、もう利用できません。セキュリティ保護のため、情報は自動的には再送信されません。
情報を再送信し、この Web ページを表示するには、ツール バーの [更新] ボタンをクリックしてください。
(IEの場合)
だとか,
本当にもう一度フォームを送信しますか?
このページを再び開くには、最初に開いたときに記入したフォームを再送する必要があります。最初にこのフォームを送信したときのWebサイト側の動作が繰り返される可能性があります。
(Safariの場合)
と警告される.しかもIEの場合,うっかりツールバーの更新ボタンをクリックしてしまうと,フレームを使っている関係上トップページに戻されてしまう(右クリック→最新の情報に更新,なら大丈夫).
これは,php.iniで
session.cache_limiter = nocache
と設定しているためらしい.session_start()する前に,session_cache_limiter(' private_no_expire')すればよい.
参考:
privateと設定すること も可能で、この場合、プロキシがキャッシュすることは許可しませんが クライアントがキャッシュすることは許可されます。
privateモードにおいて、Expireヘッダがクライアントに送信されます。これは、Mozillaのようないくつかのブラウザを混乱させます。これを避けるには、 private_no_expireモードを使用して下さい。 このモードでは、Expireヘッダはクライアントに送信されません。
If you have a dinamic website and want to allow your visitors to use the back button after they sent a form with the post method, the best combination I found was:
<?php
header("Expires: Sat, 01 Jan 2000 00:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: post-check=0, pre-check=0",false);
session_cache_limiter("must-revalidate");// and after you start the session
session_start();?>
private_no_expire がブラウザでキャッシュさせる方法なのに対し,こちらはキャッシュさせない方法だと思われる.