用户在两个标签页开着同一个表单,其中一个标签重新登录后,另一个标签提交报「链接已过期」,填了二十分钟的内容全丢了。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,nonce 和当前登录用户及会话绑定,重新登录后会话令牌变了,旧页面里的 nonce 对不上。页面本身又是几小时前渲染的。
「nonce 会话切换」这类改动最怕改一半,回滚脚本先准备好,再动生产。报错里带路径的,先去看那个路径在不在、权限对不对。
if (res.data.code === 'rest_cookie_invalid_nonce') {
saveDraft(); showRelogin();
}
同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
具体做法是,提交失败时先判断返回码是不是 nonce 失效,是的话提示重新登录而不是清空表单;把表单内容暂存到本地,登录回来再填回去;关键表单的 nonce 有效期按实际填写时长调整。
最后用这个标准收尾,重新登录后回到表单,之前填的内容还在,重新提交能成功。
