シナリオ - ユーザーがformSubmit.cfmからformAction.cfmにフォームを投稿すると、ブラウザのキャッシュに保存しないhtmlデータが作成されます。 linkTarget.cfmへのアンカータグもあります。ユーザーがブラウザを使用してformAction.cfmに戻った場合は、フォームを再送信するためにブラウザからメッセージが表示されます。フォームスコープをキャッシュして保持しない
これは一般にhttpヘッダーによって達成できます。これは<cfheader>
タグで簡単になります。
問題は、Chromeでは、ページをキャッシュしないと成功するとフォームスコープが失われることです。
コードサンプル://キャッシュ/:
formSubmit.cfm
<form action="formAction.cfm" method="post">
<input type="submit" name="submittedForm" value="submitMe" />
</form>
formAction.cfm (minus headers)
<cfif structKeyExists(form, 'submittedForm')>
<p>Form Scope exists</p>
<cfelse>
<p>Form Scope Does Not Exist</p>
</cfif>
<p><a href="linkTarget.cfm">Link to next page.</a></p>
は、試験方法は、キャッシュをクリアした後、クロムにブラウズして、それを見ていました。いったんそこにいたら、私はformAction.cfmを探します。また、キャッシュをクリアするたびにページを更新する必要があります。
私はさまざまなヘッダーの組み合わせを試しましたが、ここで最も関連性があります。
<CFHEADER NAME="Cache-Control" VALUE="no-cache">
result - page was cached
<CFHEADER NAME="Cache-Control" VALUE="no-store">
result
page to confirm form resubmission
no form scope
また、Chromeの開発ツールを使用すると、フォームデータの有無がstructKeyExists関数の結果と一致しました。
ページをキャッシュしないでフォームデータを保存するにはどうすればよいですか?
だから、ブラウザがリクエストのPOSTボディをキャッシュしたいですか?そんなことはありません。一部のブラウザでは、ユーザーが再送信する必要がある場合に備えてフォームデータを保持する独自の方法がありますが、HTTPとは無関係で、一般的な制御方法はありません。 POSTレスポンスをキャッシュしたいのは、まずは間違っているようです。 POST-Redirect-GET(303その他を参照)はどうですか?それに関係なく、POST要求本体を格納する必要がある場合は、独自に格納/復元する必要があります。セッションまたはローカル記憶域(ブラウザのWebストレージ)を使用します。 – Alex