config/session.php: 'lifetime' => 60, // 或每 5 分钟 GET /survey/heartbeat
长问卷平均填写 25 分钟,提交时白屏显示 419 Page Expired,答案全丢,这种情况占提交量的 6%。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,会话有效期设成了 15 分钟,问卷页没有心跳续期。CSRF token 跟着会话一起过期,提交必然被拒。
围绕「问卷超时提交」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。
接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。
改完顺手把文档补一句,省得下次自己重新推一遍。
处理上按这个顺序:问卷页加一个每 5 分钟的心跳请求,续一次会话;提交失败时把答案留在本地,给一个重试按钮;这类页面的会话生命周期单独调长。
改完只确认一件事:停留 30 分钟后提交仍然成功,419 出现时答案不丢并能重试。
