我在这里寻求一些建议。我之前发布了一个问题Disable submit button。
我有一个提交给自己的表单,看起来像是
<cfif isdefined(form.submit)>
thank you for taking the test
<cfelse>
Actual form with radio buttons, ques, ans
</cfif>
此后,用户参加测试后点击提交并在表单的感谢部分。此时,如果他按下浏览器上的按钮,他仍然会看到该表格。
此时我已经进行了服务器端验证,如果他刷新表单,他将再次进入感谢页面。
或者我应该以这种方式清除缓存,这样当用户点击后退按钮时,他看不到表单,只是停留在感谢页面上。
<cfoutput>
<cfheader name="expires" value="#now()#">
<cfheader name="pragma" value="no-cache">
<cfheader name="cache-control" value="no-cache, no-store, must-revalidate">
</cfoutput>
答案 0 :(得分:2)
如果用户具有唯一ID,则可以通过查找数据库记录或类似记录来查看他们是否已完成调查。否则,一个简单的选项是在提交表单后设置会话变量。会话是有时间限制的,并且在新的浏览器会话中会有所不同,因此不能保证让同一个人再次提交调查,但这样的事情可能会解决您的问题。
<cfif structKeyExists(form,"submit") or structKeyExists(session, "completed")>
<cfif !structKeyExists(session, "completed")>
<!--- do validation etc here, if all good then --->
<cflock scope="session" timeout="5">
<cfset session.completed = true>
</cflock>
</cfif>
thank you for taking the test
<cfelse>
Actual form with radio buttons, ques, ans
</cfif>
或者,您可以使用Cookie(cfcookie
)而不是使用会话来完成此操作。