登录按钮点得快一点,第二次请求返回当前会话已存在请勿重复登录,页面停在错误提示上,其实第一次已经登录成功了。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,两次请求几乎同时到达,第一次写入了会话,第二次进来时检测到同一用户已有活跃会话就直接拒绝。前端没有在请求发出后锁住按钮,两次提交都到了后端。
碰到「重复登录会话冲突」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。改完顺手把文档补一句,省得下次自己重新推一遍。
$('#login-btn').prop('disabled', true);
$.post('/login', data).always(function () {
$('#login-btn').prop('disabled', false);
});
具体做法是,提交时立刻禁用按钮并置 loading,请求结束再恢复;后端对同一会话的重复登录做成幂等,已登录就返回成功;用登录令牌做去重,短时间内的相同请求只处理一次;手动连点五下,看是否只有一条会话记录。
最后用这个标准收尾,连点多次只发一次有效请求,页面直接进用户中心,不再弹会话冲突。
