【php】同ページ$_POST使用時の再送信対策

formをPOSTで送信後、ページをリロードするとform再送信の確認メッセージがでる問題。
メッセージを出さないため&再送信を防ぐための方法を考える。

formを送信

POSTを受け取ったら$_SESSIONに格納。同ページに移動。

$_SESSIONを使って処理。処理後に破棄する。

という方法をとる。

<?php
session_start(); //セッション開始
if(!empty($_POST)){//ポストが空でなければ
$keys = array_keys($_POST);//ポストのキーを取得

        foreach($keys as $key){//$_POSTの要素を全て$_SESSIONに移す
            $_SESSION[$key] = $_POST[$key];
        }
        $_SESSION["array_post_keys"] = $keys;//キー配列も格納

        http_response_code(301);
        header("Location: ".(empty($_SERVER["HTTPS"]) ? "http://" : "https://").$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"]);
        exit;//処理を中止する
    }
?>

 

これを<html>前に設置して、後は処理していく。