我有一个简单的表单,其中包含名为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)#">
但它没有用。
答案 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标记。