Gravity Forms 驗證異常再次出現,重建快取後恢復
整理日期:2026-09-12
先前處理過新版 Markup、欄位排版與送出流程,當時測試正常,數天後又出現選單已經選好,送出卻顯示 Invalid selection. Please select from the available choices. 的問題。
重新選取後再次送出,有些紀錄被放進 Spam,畫面也沒有前往原本的感謝頁,Entry Notes 顯示先前曾發生 state validation 失敗。
本次上午清除全站快取並重新執行 Preload,之後以無痕視窗確認送出、感謝頁與正常紀錄,後續再次測試也正常,目前記錄為重建快取後恢復使用。
前一次處理可看 Gravity Forms 新版 Markup、兩欄排版與快取。
先拆成幾層看
Section titled “先拆成幾層看”- 表單設定:Markup、合法選項、確認頁與防垃圾訊息設定是否改變。
- 頁面快取:訪客拿到哪份 HTML,裡面的表單 state 是何時產生。
- 實際送出:第一次驗證、修正後重送、感謝頁與 Entry 狀態是否正常。
上次處理到本次再次出錯的天數,和某一份快取內 state 的年齡,是兩個不同的時間,排查時要分開記錄。
清除後取得的新表單,合法選單值可以通過驗證,這與使用者實際送出恢復正常的結果一致。
本次也核對 Gravity Forms 3.1.1.2 的原始驗證程式,並在本機模擬時間測試,預設 state 年齡未滿 48 小時時通過期限檢查,滿 48 小時時判為過期,官方的 gform_state_lifespan 說明 也記載預設期限為兩天。
清除乾淨並重建後,頁面會取得新表單,但新表單產生的 state 也有期限,若同一份快取長時間保留,裡面的驗證資料仍會變舊。
多位訪客讀到同一份頁面快取時,也會取得同一份 state,期限從 state 產生時開始算,不會因為新訪客進站就重新起算,這能解釋為什麼同一份過期快取可能影響多位填表者。
同一個 Form ID 放在不同網址,或桌機與手機使用不同快取副本時,state 與建立時間可能不同,因此不能只看 Form ID 就認定所有人拿到相同資料。
這次確認的是套件的預設期限機制與重建後的實測結果,沒有重播出錯那筆原始請求,Entry Notes 本身也不能證明每筆 Spam 都由過期造成。
本次已完成:重建快取並測試送出
Section titled “本次已完成:重建快取並測試送出”本次採用清除全站頁面快取、重新執行全站 Preload,再以無痕與後續實際送出確認恢復,排查期間也確認 Gravity Forms 已更新為 3.1.1.2。
網站頁面多、重建時間長,所以沒有將全站快取期限改成每 8 小時,也沒有把大量含表單的頁面全部排除快取。
目前的正常結果仍需和長期是否再出現相同錯誤分開記錄,這次沒有修改 state 有效期限或關閉 Advanced Honeypot,通知信是否實際收件也沒有另外驗收。
下次待測:保留頁面快取,表單另外載入
Section titled “下次待測:保留頁面快取,表單另外載入”候選方案是 Gravity Wiz 的免費 GF Cache Buster,讓頁面其他內容繼續使用快取,表單另外透過 AJAX 取得新內容,這與只啟用「AJAX 送出」不同,官方提供的取得方式是透過 Spellbook 安裝。GF Cache Buster 說明
這個方案尚未安裝或實測,下次先挑一張表單確認:
- Elementor/UAEL 表單元件的嵌入方式能被接管,原有樣式與動態帶值正常。
- 頁面仍命中快取,表單有獨立請求,而且拿到的新 state 不會一直沿用頁面快取的時間。
- 選單、必填錯誤後重送、感謝頁、Entry 狀態與通知流程正常,桌機、手機和表單載入等待時間都要一起看。
- 較舊的頁面快取仍能取得新表單,不能只測剛清快取的狀態。
首次改成動態載入,需要讓受影響頁面的快取更新一次,取得新的載入方式,單張表單驗收後再決定是否套用其他表單,若不相容就停用該表單的 Cache Buster 並恢復原本嵌入方式。
不建議先做的事
Section titled “不建議先做的事”- 只因剛清快取後成功,就把隔天以後的狀態也寫成驗收完成。
- 沒有評估預載時間與主機負擔,就要求全站頻繁重建。
- 把更新外掛當成 state 有效期限會自動取消。
- 關閉全部 Spam 防護,或把所有 Spam 強制改為正常。
- 沒確認表單元件相容性,就一次改掉全站表單載入方式。
下次遇到可以先整理什麼
Section titled “下次遇到可以先整理什麼”- 上次正常測試時間、本次異常時間,以及中間的版本或設定變更。
- 表單網址、Form ID、桌機/手機、登入/未登入狀態。
- 快取來源、state 建立時間與有效期限,先保存必要證據再清除。
- 實際選項、錯誤訊息與 Entry Notes,對外整理時移除個人資料。
- 清除與 Preload 的執行時間、最終進度,以及送出和感謝頁的結果。
- 若測 Cache Buster,保存動態請求、state 更新與頁面快取仍有效的證據。
WordPressGravity FormsWP-Optimize快取Preloadstate validationSpamGF Cache Buster