ALTER TABLE wp_survey_response ADD UNIQUE KEY uniq_token (submit_token);

网络慢的时候用户连点四次,后台同一份问卷出现 4 条记录,时间戳只差 1.2 秒,统计样本直接翻倍。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,提交按钮只在请求发出后置灰,失败恢复得太快。服务端没有用 token 做幂等,每次 POST 都当成新记录插入。

「问卷重复提交」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

处理上按这个顺序:提交时生成一个 uuid 随表单一起发,服务端在 token 上建唯一索引;按钮点击后立即 disabled,按返回结果决定是否恢复;用同一个 uuid 连发三次,只应成功一次。

改完只确认一件事:同一 uuid 连发三次只入库一条,另外两次返回 409,统计总数不变。

作者 9823189