2017-09-29 6 views
0

シナリオ - ユーザーが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関数の結果と一致しました。

ページをキャッシュしないでフォームデータを保存するにはどうすればよいですか?

+0

だから、ブラウザがリクエストのPOSTボディをキャッシュしたいですか?そんなことはありません。一部のブラウザでは、ユーザーが再送信する必要がある場合に備えてフォームデータを保持する独自の方法がありますが、HTTPとは無関係で、一般的な制御方法はありません。 POSTレスポンスをキャッシュしたいのは、まずは間違っているようです。 POST-Redirect-GET(303その他を参照)はどうですか?それに関係なく、POST要求本体を格納する必要がある場合は、独自に格納/復元する必要があります。セッションまたはローカル記憶域(ブラウザのWebストレージ)を使用します。 – Alex

答えて

2

いくつかの奇妙なキャッシングの問題に巻き込まれてしまった。 あなたはページでバージョン番号を教えてみましたか?

<form action="formAction.cfm?V=#now()#" method="post">

+0

私はよりグローバルなソリューションを探しています。質問で言及されていないのは、cfheaderタグが、複数のApplication.cfm(.cfc)ファイルで使用されるカスタムタグにあることです。 –

関連する問題