データの再送信を防ぐ仕組み

※以下、自分なりのまとめ


PRGパターンとは、

  • Post/Redirect/Get の略称
  • Post でデータを送信
  • サーバで処理後、Redirect で別URLに遷移させる
    • 画面表示のために Get でアクセスすることになる

PRGパターンにすると

フォームの内容が複数回送信されるのを防ぐことができる。具体的には F5 を押されても Get アクセスされるだけだから再送信されることがない。
ただ、「戻る」ボタンで戻られてしまうと、結局は再送信されてしまうので、PRGパターンだけでは完全な防止策にはならない。

完全な防止策として

再送信を防ぐための識別として、以下を使って管理方法がある。

  • token
  • SessionID

サーバで保持している token と送信された token が同じであれば実行、などの処理が必要になる。

使いどころ

POSTの結果と通常のアクセスで,別のURLで同じ情報が見えるというのはあまり好ましくありません。POSTの結果は情報をサーバー側で記録する機能だけを持ち,そこから,表示のためのページへリダイレクトする,というのは理にかなっています。

なるほどなるほど。これまで指摘もされてこなかったし、意識もしていなかったことだけど、設計する際にはこういう部分にも気にかけなければ。

今まで社内のフレームワークにどっぷり浸かっていて、「社内フレームワークでしかプログラム書けない人」になってたからひたすら勉強不足。