🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

17551閲覧

ブラウザバックなどで POST 内容を再送信させない方法

pac894398

総合スコア429

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/03/25 02:41

コメントフォームつきのページなどで、ブラウザバックをしようとすると、
再送信の警告がでます。そのまま続行すると、再送信されていまいます。

これは token で解決してきましたが、
複数タブを開くとエラーになると不便です。

ブラウザバックで POST内容の再送信を無効にする方法はないでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2021/03/25 02:43

ブラウザバックではPOSTは送信されませんよね? もう少し詳しく説明をお願いします
pac894398

2021/03/25 02:55

言葉足らずで申し訳ありません。 フォーム付のページで投稿➡他のページで遷移➡ブラウザバック のように動くと、再POSTされてしまいます。 これで伝わりますでしょうか?
yambejp

2021/03/25 03:09

簡易的なものでいいので具体的にソースを提示できますか? ブラウザバックでは再POSTはされませんけど (ページの更新ではないですよね?)
pac894398

2021/03/25 03:19

すみません、いただいた回答で解決しました!
K_3578

2021/03/25 03:31 編集

>いただいた回答 それで解決されたのならその回答をBAにして クローズお願いします。
退会済みユーザー

退会済みユーザー

2021/03/25 03:39

解決できたのであればおめでとうかなぁ。 僕のではない気がするのだけども…時系列的にK_3578様のコメントのような?
K_3578

2021/03/25 04:51

自分ので解決したなら回答する程の事でもないのでテキトーに名前だけでも挙げて自己解決してくれれば 良いですけどね。 私個人としてのBAならyambejpさんの回答ですが・・・。
K_3578

2021/05/11 03:45

(クローズされてないので再掲) >いただいた回答 それで解決されたのならその回答をBAにして クローズお願いします。
guest

回答3

0

POST処理の流れをきちん整理するとよいでしょう

POSTする
→バリデートして問題があれば再入力
→問題なければセッションに突っ込んで登録ページへheaderで飛ばす
→登録が完了したら登録完了ページへheaderで飛ばす

登録完了ページからバックしてもPOST前のページにいくので問題ない

投稿2021/03/25 03:23

yambejp

総合スコア116690

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

昔から、2重サブミット問題とか重複投稿問題とかいわれるヤツですね。
質問にある以外にもいろいろパターンがあります。

今となっては少し古い資料になるのですが、ほどよくまとまった記事があるので紹介します。
さいきょうの二重サブミット対策

また、この手2重投稿抑止系の token は CSRF 対策用の token と性質が似ており、複数タブで使用したいという場合、以下が参考になるかと
より高度なCSRF対策 – URL/URI個別にバリデーションする方法

ただ、ホントに複数タブに対応する必要があるのか?とかちゃんと詰めた方が良い気がします。

投稿2021/03/25 09:06

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

送信後の画面でブラウザバックを禁止するとか。

javascript

1history.pushState(null, null, location.href); 2window.addEventListener('popstate', (e) => { 3 history.go(1); 4});

コードは拾い物です。

参考URL PisukeCode – Web開発まとめ JavaScriptでブラウザバックを “ほぼ完全禁止” する方法
https://pisuke-code.com/javascript-prohibit-browser-back/

以下蛇足です。
sessionで一度通したデータを弾くとか、
DBと照合して同一データであれば登録を弾くとか。

投稿2021/03/25 02:56

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pac894398

2021/03/25 03:00

回答ありがとうございます。 ブラウザバックの禁止も検討しましたが、ユーザーの利便性を保つために禁止はしたくないです。 セッションで弾くなどもいいのですが、ブラウザの再送信確認画面が邪魔という課題が残ります。 今のところ、フォームを ajax にするのが最適解だと考えていますが、 フォームが多すぎて実装が大変なので、他の方法がないか模索しています。
K_3578

2021/03/25 03:16

再送信確認画面を消すとかだったら調べれば結構記事見つかりますけど一度見てみては。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問