3

firstName、lastName、住所、電話番号という名前の 4 つのフィールドを持つ単純なフォームがあります。

ユーザーがこのフォームに入力して送信ボタンをクリックした後、すべてがうまくいけば、そのユーザーを成功ページにリダイレクトします。

しかし、成功ページからブラウザの戻るボタンをクリックすると、フォーム フィールドの値がフォームに再入力されます。どうすればこれを防ぐことができますか?

私はすでにこのコードを試しました:

<cfheader name="cache-control"  value="no-cache, no-store, must-revalidate">
<cfheader name="pragma" value="no-cache">
<cfheader name="expires" value="#getHttpTimeString(now()-1)#">

しかし、それは機能していません。

4

3 に答える 3

6

フォーム フィールドを再作成することは良いことです。それを壊そうとするのはやめましょう。

実際に重複送信を防止したい場合は、一意の ID (UUID など) をフォームと共に送信し、最近受信した ID を追跡します (追跡する数はアプリケーションによって異なります)。

重複を受信した場合は、それを無視する (そして適切なメッセージを表示する) か、さらに一歩進んでください: 受信したデータが既に送信されているかどうか、または以前の送信を変更しようとしている (つまり、タイプミスを修正する) かどうかを確認するか、または新しいレコードを作成する (名前と電話番号が変更された可能性があります) か、ユーザーに選択を求めるプロンプトを表示します。

于 2013-07-31T13:50:31.170 に答える
0

これは、実行すると機能します。まず、testform.cfm をファイルします。

<cfsetting showdebugoutput="no">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0    
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<CFHEADER NAME="Cache-Control" VALUE="no-cache, no-store, must-revalidate">
<!--- this is meant for legacy HTTP 1.0 servers 
- only prevents caching when used with secure communications (https://)  --->
<CFHEADER NAME="Pragma" VALUE="no-cache">
<!--- this doesn't prevent caching, 
just means for future requests that browser must contact server for fresh copy. 
cached copy used for BACK and FORWARD buttons--->
<CFHEADER NAME="Expires" VALUE="-1">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>

<body>
<form action="formtarget.cfm" method="post">
<input type="text" name="x" value="" />
<input name="submitbutton" type="submit" />
</form>
</body>
</html>

これはformtarget.cfmです

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0   
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>
<body>
<cfdump var="#form#">
</body>
</html>

これら 3 つの cfheader タグはカスタム タグに含まれています。

于 2013-07-31T15:31:41.607 に答える