PHPのリロード対策

あきら×ひろこ=ゆう PHPのリロード対策を誤っていました!

PHPでこれを表示させないためには、パラメータをセッション変数に保存し、Location ヘッダーに自分自身を指定して送信するのが一般的だ。

少し前は、以下の様に実装していた。

if isset $_POST[ ‘command’ ] {
パラメータの処理

header ‘Location: ‘ . $_SERVER[ ‘PHP_SELF’ ] ;
exit ;
}

しかし、これだと以下のようなフォームでページが呼び出された場合にうまく行かない。


上記実装では command パラメータが与えられる事を前提としているのに、パラメータは何も渡って来ない。

正しい実装は以下の様にするべきだ。

if $_SERVER[ ‘REQUEST_METHOD’ ] == ‘POST’ {
パラメータの処理

header ‘Location: ‘ . $_SERVER[ ‘PHP_SELF’ ] ;
exit ;
}

なるほど確かにそうしがち忘れがちのメモ。