3

我有一个简单的表单,它有四个字段,分别名为 firstName、lastName、address 和电话号码。

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

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

我已经尝试过这段代码:

<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)并跟踪您最近收到的那些(要跟踪多少取决于您的应用程序)。

如果您收到重复的内容,您可以忽略它(并显示适当的消息),或者更进一步:检查收到的数据是否已经提交,或者是否尝试更改之前提交的内容(即修复错字),或者创建一条新记录(可能名字和电话已更改),或提示用户选择,或其他。

于 2013-07-31T13:50:31.170 回答
2

我知道重新填充 FORM 字段是个好主意,但我们可以使用 autocomplete="off"禁用它

于 2013-07-31T14:07:56.353 回答
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 标签。

于 2013-07-31T15:31:41.607 回答