「ページの有効期限切れ」対策

IEでブラウザの戻るボタンを押すと「ページの有効期限切れ」が出てしまうとき

session_start()を宣言する前に、session_cache_limiterprivate_no_expireを指定します。

session_cache_limiter('private_no_expire');

リロード対策

登録などのフォームの画面遷移で1度しかPOSTしたくないケースがあります。その際はどのような対策をすればよいのでしょうか。 フォーム画面でチケットを発行し、セッションに保存しておくというのが良いようです。そしてhiddenで次の画面にそのチケットがPOSTされるようにします。 受け取ったプログラムでは、POSTされたチケットとセッションに保存されているチケットの値が一致するかチェックして、同じであれば処理に進みます。 処理の前にセッションに保存されているチケットをunsetしておきましょう。

フォーム画面でチケットを発行し、セッションに保存

$_SESSION['tid'] = uniqid(); 

次の画面にhiddenでチケットをPOST

<input type="hidden" name="ticket" value="$_SESSION['tid']"> 

POSTされたチケットとセッションに保存されているチケットの値が一致するかチェック

if($_SESSION['tid'] === $_POST['tid']) { 
  unset($_SESSION['tid']); 
  do_proc(); // 処理 
}