后台里出现两条内容几乎一样的询盘,时间只差几秒,销售打过去才发现是同一个人。多数人第一反应是用户手快,多按了一下。但连着几个月都这样,就该往代码和网络链路上找原因了。
重复提交有四个常见来源
一是网络慢,用户等不到反馈,反复点击;二是请求超时后客户端自动重试,服务端两次都收下;三是提交成功后用户刷新页面,浏览器重发上一次请求;四是脚本被重复绑定,一次点击触发了两次提交。四种情况的日志特征不同,先分清再改。
前端:点下去就要有反应
按钮在点击后立即进入加载状态并禁用,是最直接的一道闸。很多页面只改文案不置灰,用户看到按钮还能点,自然会再点。表单校验未通过时不要解除禁用,否则又回到原点。
脚本绑定的坑
页面里既有全局脚本,又有组件内的绑定,或者弹窗关闭再打开时重复初始化,都会让同一次点击触发多次提交。排查方法很朴素:在提交函数里打一行日志,看一次点击打印几次。
后端:用幂等兜底
前端限制可以被绕过,服务端仍要做防护。常见做法是给每次表单渲染发一个一次性令牌,提交时校验并作废;或者对同一来源、同一内容的请求设一个短时间的去重窗口;数据库层再对关键字段加唯一约束。三层里做两层,基本不会再出现成对的重复记录。
超时设置要一致
网关、应用服务器、前端脚本各自有超时。若网关先断开而应用仍在处理,用户看到失败、实际已写入,重试就会产生第二条。把三处超时按链路顺序排好,留出余量,能消掉很大一部分“莫名重复”。
提交成功要给明确页面
用弹窗提示成功,用户容易以为没提交上而返回重来;用独立的结果页,地址变化,刷新也只是重看结果。这一步改动很小,效果却明显。
排查时看时间戳
把重复记录按时间排序,看间隔是几百毫秒还是几秒。前者更像脚本重复绑定,后者更像用户重复点击。日志里同时看请求来源与客户端标识,很快能定位。
小结
重复询盘看似小事,处理不好会消耗销售信任、污染统计数据。前端禁用、后端幂等、超时对齐三件事做好,问题基本消失。冉冉科技在表单功能交付前,会把重复提交纳入测试项。
关于冉冉科技
江苏冉冉信息科技有限公司(品牌“冉冉科技”)成立于2017年,位于江苏省常州市新北区,是一家从事互联网信息服务、电子商务应用与企业应用系统开发的技术服务企业。公司业务涵盖网站建设、网页设计、SEO优化、竞价包年、域名注册、虚拟主机、企业邮箱、整合营销及企业形象策划等,以“只做有效果的网络营销”为服务主张,累计完成三千余起网站建设与服务。

冉冉科技

商务咨询