H6.03.2OTP expiry and resend interval设计研究

验证码有效期与重发间隔需明示

别名: 验证码过期 · 重发倒计时 · OTP TTL

概念解释

一次性码有两段时钟:有效期(过了就不能再用来登录)和重发间隔(再要一条之前必须等)。明示指人在输入屏上能看见这两段分别还剩多久,以及过期后该做什么,而不是只在提交失败后才说「验证码无效」。这条管时钟的可见性,不管码怎么贴进框,也不管猜错几次该锁。

机制

OTP 把人放进一个看不见的倒计时里。短信延迟、邮件进垃圾箱、切去看码再回来,都会让「我以为还有效」和「服务器已经作废」错位。失败文案若只说「错误」,人无法区分打错、过期、还是发到了别的号码。重发按钮若无间隔说明,会被连点,通道被限流后看起来像系统坏了。两段时钟职责不同:有效期保护码的猜测窗口,重发间隔保护通道与成本;把它们合成一个「60 秒后再试」会让人在码还有效时丢掉旧码、或在码已死后仍死等不能重发。可见的分母让等待可计划,而不是盲目刷新。

怎么研究

操纵时钟信息是否出现、两段时钟是否分开,测量过期附近的行为和主观原因归因。

自变量:是否显示剩余有效秒数、重发是否有独立倒计时、过期文案是否区分「已过期」与「不匹配」。 因变量:过期后仍提交的次数、无效重发点击、把延迟当成失败而放弃的比例、对「我该等还是该重要」的判断正确率。

实验室网络很快,短信延迟接近零,测不到真实错位。应用层可用注入延迟或把 TTL 收到数十秒来观察。不要把「有倒计时就完成更快」当成目标——目标是归因正确:人在过期时选择重发,在有效时选择等待或粘贴已收到的码。

边界

验证器 App 的 TOTP 本身就是滚动时钟,产品再叠一个「五分钟有效」会与令牌窗口冲突,应服从验证器周期而不是另造 TTL 文案。无障碍用户可能听不清每秒跳动的读数,倒计时要以低频更新或静态「约 N 分钟内有效」补充。邮件 OTP 的传输延迟方差大,过短的明示有效期会制造大量「我刚收到就已经死了」;时钟必须覆盖通道的典型迟到,而不是只覆盖计算时间。登录页被系统杀掉后,时钟状态要在返回时重建,不能假装还是刚发送。

怎么落地

  • 在 OTP 输入屏同时显示「此码在 hh:mm:ss 前有效」和「N 秒后可重发」,两段独立倒计时,重发启用时旧码是否作废要写明。
  • 提交失败按原因分支:不匹配、已过期、尚未到达(若可探测),禁止统一成「验证码错误」。
  • 重发产生新码时作废旧码,并重置有效期显示,避免人贴上一条已失效的短信。
  • 验证:把 TTL 收到可观察的短窗口,让未参与设计的人在码死后操作一次,看其是否主动点重发且能解释为什么;再在间隔未到时连点重发,界面应挡住并说出还要等多久,而不是静默失败。

延伸

  • 同组H6.03.1 验证码需支持粘贴与自动填充 · H6.03.3 短信通道失败需有备用方式 · H6.03.4 免密登录链接一次性使用后应立即失效,防止链接被转发滥用 · H6.03.5 验证码尝试次数需要限制,防止被暴力枚举 · H6.03.6 魔法链接与验证码两种免密方式的安全强度并不等同 · H6.03.7 免密登录仍需要设备层面的二次确认以防止链接被截获后滥用
  • 相邻H6.11 密码找回与重置 · H3.02 错误消息的三要素
  • 站内检索OTP expiry · resend cooldown · one-time password TTL

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/H6.03.2