2015-09-01 79 views
0

我在这里寻找一些建议。我之前发布了一个问题Disable submit buttonColdfusion表单提交禁用提交按钮

  1. 我有一个提交给自己,并期待liek下面

    <cfif isdefined(form.submit)> 
        thank you for taking the test 
    <cfelse> 
        Actual form with radio buttons, ques, ans 
    </cfif> 
    
  2. 现后,用户需要经过测试和命中提交并在窗体的感谢部分的形状。在那时,如果他点击浏览器上的按钮,他仍然看到该表单。

  3. 我在这里有服务器端验证,如果他刷新表单,他会再次被带到感谢页面。

  4. 我试图禁用提交按钮,但这不会始终在所有浏览器上工作。
  5. 任何人都可以请告诉我在这种情况下我最好做什么。
  6. 我应该做一个history.forward();在页面上?以便当用户点击浏览器按钮时,他仍然保持在同一页面上。
  7. 或者我应该以这种方式清除缓存,以便当用户点击返回按钮时,他看不到表单,但只是停留在感谢页面上。

    <cfoutput> 
        <cfheader name="expires" value="#now()#"> 
        <cfheader name="pragma" value="no-cache"> 
        <cfheader name="cache-control" value="no-cache, no-store, must-revalidate"> 
    </cfoutput> 
    
  8. 或者是有什么我不知道,上面这些只是黑客,不应该这样做。非常感谢您的答复。提前致谢。
+1

我建议试用6和7. –

回答

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)而不是使用一个会话做到这一点。

+0

感谢您的意见。我正在做类似上面的事情,但这并不妨碍用户在浏览器后退按钮时不能看到表单... – user747291

+0

您只需检查'。如果确实如此,那么您知道他们已经完成了重定向。 –

+0

这只适用于页面请求。使用浏览器返回不会导致请求页面。 –