单击后退按钮后如何防止表单字段重新填充?

时间:2013-07-31 12:36:40

标签: caching browser coldfusion

我有一个简单的表单,其中包含名为firstName,lastName,address和phone number的四个字段。

用户填写此表单并单击提交按钮后,如果一切正常,我会将该用户重定向到成功页面。

但是,在成功页面中单击浏览器后退按钮时,表单字段值将在表单上重新填充。我怎样才能防止这种情况发生?

我已经尝试过这段代码:

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

但它没有用。

3 个答案:

答案 0 :(得分:6)

重新填充表单字段是的事情,不要试图破解它。

如果你真正想要的是防止重复提交,请发送一个唯一的ID(例如UUID)以及表格,并跟踪你最近收到的内容(跟踪的数量取决于你的申请)。

如果您收到重复内容,您可以忽略它(并显示相应的消息),或者更进一步:检查收到的数据是否已经提交,或者是否尝试更改以前的提交(即修复输入错误) ),或创建一个新记录(可能是名字和手机被更改),或提示用户选择,或其他什么。

答案 1 :(得分:2)

重新填充FORM字段是一个很好的想法我知道,但我们可以通过使用禁用它 的自动填充=&#34;关闭&#34;

答案 2 :(得分: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>

我们在自定义标记中包含这三个cfheader标记。