防止表单重复提交的方案

1.按钮只能单击一次,加上confirm确认框
2.使用token,requestScope和sessionScope确认对比
这些就不要再说了,还有其他解决方案吗?

阅读 9k
10 个回答

我觉得靠谱的就是验证码一类,或者提交之后重定向,你只在按钮上下功夫,我如果直接从浏览器发起请求不走按钮就没用了。

1.button 上面加disable 属性,一旦点击,马上禁用,直到后台返回结果.

2.后台加缓存,一旦已经提交马上加个缓存,后台完成处理,释放缓存,每次提交验证缓存是否存在。

3.如果涉及到数据库操作,在数据库加唯一索引,防止重复提交,导致数据不一致或者冗余。

4.验证码机制,每次提交,要求输入验证码,无论验证码是否填对,再次刷新验证码。

5.限制表单提交频率,如每5秒内 只能提交一次,每次提交,需等待5秒才能第二次提交。

6.session 机制,每次提交完事,session放标识,完成后,取消标识。

1:点击按钮后使按钮不可用
借助 js 之力,在提交按钮点击后,即取消按钮的可用性。可以阻挡网络延迟的时候用户反复点击提交按钮,导致多次提交。尤其对 ajax提交的站点有效;
甚至在 disable 按钮后,可以稍微人性化地给出提示,比如使用 jQuery 代码在提交时可以这样:
$(".hisu").attr("disabled","disabled");
$(".hisu").attr("value","正在发布评论...");
2:使用session做标记
session 支持用户整个会话的信息存储,在用户提交表单的同时使用 session 存储用户的提交信息,这种解决方法在业内被称作为令牌法,即token。
基本的步骤是:
1.用户提交数据的时候,创建session,例如创建一个名为 token 值为当前时间戳的 session;
2.存入数据库的逻辑要在存入之前检查是否有名为 token 的 session ,如果有,则返回错误,禁止提交;

这种方法应该算是在根源上杜绝了表单的重复提交。但是最好是能两者结合起来,确保数据安全的前提下还可以保证用户体验。

  1. 利用数据库唯一约束
  2. 保证提交操作的幂等性,这样多次提交也不怕

一般的重复提交都是前端控制点击事件,后端通过token+session(或者缓存)保证唯一提交;
之前做过一个防ajax重复点击的功能是把URI和用户唯一标识和一个次数标志放在缓存中,使用拦截器每次校验此次请求的合法性,主要是由于我们此次ajax请求业务比较复杂耗时较长,不知道能不能适用你的需求

前端方案 上一个请求锁 false 请求后变为true 请求没有回来之前retrun掉 回来后再置为false

前端处理,点击提交不能再次点击就可以实现
后端处理,判断用户提交频率和表单标示位进行处理

登录太频繁, 后端可以检测到, 返回一个错误码, 前端就可以提示了, 让他输入验证码后再提交。

重复提交也就是在前端限制一下就可以,你总不能限制后台接口不允许重复请求吧?换句话说,如果你的接口复合restful规范,重复请求的结果也是一样的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏