フォームデータの再送信 についてお聞きします。

下記の start.php ページから始まります。
<?php
session_cache_limiter('private, must-revalidate');

?>
<form method="POST" action="next.php">
<select name="items" >
<option value="aa">aa</option>
<option value="bb">bb</option>
<option value="cc">cc</option>
</select>

セレクトボックスのデータをPOSTで次のページ("next.php")に渡しています。

 【←】(戻る)ボタンで start.php に戻った後、
【→】(進む)ボタンで next.php を表示する際、下記のメッセージページが表れます。
「フォーム再送信の確認
このウェブページを正しく表示するには、先ほど入力したデータが必要です。...[再読み込み] をクリックしてください。」

これはどういう理由ですか?また、この表示を出さずに次のページに進む方法を教えてください。

よろしくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2011/05/30 11:37:18
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:mattn No.3

回答回数104ベストアンサー獲得回数23

ポイント32pt

http://q.hatena.ne.jp/

※URLはダミー

これはどういう理由ですか?

ブラウザのキャッシュにnext.phpの表示状態が保持されてしまっているからです。

戻るをクリックした事で「next.phpに表示していた内容と整合性が取れなくなったよ」

とブラウザが警告しています。

また、この表示を出さずに次のページに進む方法を教えてください。

session_cache_limiter でキャッシュは無効に出来ます。

ただしキャッシュを無効にしたからといって問題解決になる訳ではありません。

先の画面に進めてしまいます。戻る/進むボタンを使えないようにする根本的な解決方法はありません。

Ajaxを使って1ページ内で画面を遷移(させた様にみえる様に)するか、next.phpでリダイレクトしてしまってPOST行為を消してしまうのも有効です。

※回答の中に間違っている回答がある様なので気をつけて。

id:gdwtseq

ありがとうございます。

ブラウザの仕様だから仕方ないのでしょうか(?)

2011/05/24 21:39:58

その他の回答3件)

id:Banias No.1

回答回数237ベストアンサー獲得回数19

ポイント23pt

これはどういう理由ですか?

FORMタグの "items" の option が選択されていないためです。


また、この表示を出さずに次のページに進む方法を教えてください。

"items" の option を選択してからページを進んでください。

または、選択した値を Cookie に入れておけばできます。


参考 「Cookieの読み書き

id:chinchin-kozou No.2

回答回数198ベストアンサー獲得回数7

ポイント23pt

PHPで 「Webページの有効期限が切れてます」となる時の傾向と対策

http://fdays.blogspot.com/2010/11/php-web.html

こちらが参考になります。

id:mattn No.3

回答回数104ベストアンサー獲得回数23ここでベストアンサー

ポイント32pt

http://q.hatena.ne.jp/

※URLはダミー

これはどういう理由ですか?

ブラウザのキャッシュにnext.phpの表示状態が保持されてしまっているからです。

戻るをクリックした事で「next.phpに表示していた内容と整合性が取れなくなったよ」

とブラウザが警告しています。

また、この表示を出さずに次のページに進む方法を教えてください。

session_cache_limiter でキャッシュは無効に出来ます。

ただしキャッシュを無効にしたからといって問題解決になる訳ではありません。

先の画面に進めてしまいます。戻る/進むボタンを使えないようにする根本的な解決方法はありません。

Ajaxを使って1ページ内で画面を遷移(させた様にみえる様に)するか、next.phpでリダイレクトしてしまってPOST行為を消してしまうのも有効です。

※回答の中に間違っている回答がある様なので気をつけて。

id:gdwtseq

ありがとうございます。

ブラウザの仕様だから仕方ないのでしょうか(?)

2011/05/24 21:39:58
id:a-kuma3 No.4

回答回数4974ベストアンサー獲得回数2154

ポイント32pt

form で送信する内容によりますが、回避するだけだったら、form の method を POST → GET にすれば、あのメッセージは出なくなります。

ただ、「form の内容により」と書いたのは、POST にしている意味があるからです。

  • GET にすると、パラメータの内容がログに残る

  • 不用意に複数回送ってはいけないリクエストかもしれない



こういったあたりを無視しても構わないのであれば、method を変えちゃうのがお手軽です。


http://dummy/

id:gdwtseq

参考になります。ありがとうございました。

2011/05/25 18:11:13

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません