006:ページをリロード禁止/再読み込み禁止にする対象言語:PHP / Cookie
|
|
キーワード:PHP 5.0 session cookie リロード 再読込 させない 禁止 制限 不可能 対策 | |
Ajaxを導入していない状況で、フォームで入力されたデータをページ遷移(移動)で反映させるとき、多くの場合は遷移後のページでデータ処理→表示という流れになります。 理総研においても「A'n'kingで問題を解く」→(ページ移動)→「マッチレポート画面で成績集計・データベース登録・発表」という王道パターンを利用しています。 このとき遷移後のページをユーザーがリロードすると、成績処理が再び実行されてしまい成績の正当性が保証されません。遷移後のページのみデータをキャッシュしないという逃げ道はありそうでいて、理総研では何らかの事情(もう忘れた)でその逃げ道が絶たれた記憶があり、 他の方法を模索しているときにセッションクッキーの短期発行という方法に思い至りました。 クッキーを発行できるツールであれば、それがPHPでなくともPerlやJavaScript等でもこのリロード対策が可能です。 もちろんこれはユーザー側のクッキーの受け入れ態勢が整っていないと功を奏しませんが、理総研はそもそもユーザー登録制でセッションによる認証をベースに置いているので問題とはなりません。そこでここでは、セッションクッキーを使ったリロード対策について解説していきます。 | |
<?php session_start(); $_SESSION['user']['reload'] = "taisaku"; $reload_off = $_SESSION['user']['reload']; print <<<EOF <input type="hidden" name="reload" value="$reload_off" /> EOF; ?>
<?php session_start(); if ($_SESSION['user']['reload'] === $_POST['reload']) { //一致するならセッションデータを消す。 $_SESSION['user']['reload'] = ""; //(一致したときの処理...) } else { //(リロードされたとき、一致しないときの処理...) header("Location: http://www.kantei.go.jp/"); //リロードされたから首相官邸(例)のページへ exit; } ?>
|