1.按钮只能单击一次,加上confirm确认框
2.使用token,requestScope和sessionScope确认对比
这些就不要再说了,还有其他解决方案吗?
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 ,如果有,则返回错误,禁止提交;
这种方法应该算是在根源上杜绝了表单的重复提交。但是最好是能两者结合起来,确保数据安全的前提下还可以保证用户体验。
一般的重复提交都是前端控制点击事件,后端通过token+session(或者缓存)保证唯一提交;
之前做过一个防ajax重复点击的功能是把URI和用户唯一标识和一个次数标志放在缓存中,使用拦截器每次校验此次请求的合法性,主要是由于我们此次ajax请求业务比较复杂耗时较长,不知道能不能适用你的需求
最简单的不是 PRG (Post-Redirect-Get) 么?
[[http://www.vaikan.com/prevent... 防止表单重复提交的几种策略 | 外刊IT评论]]
12 回答5.9k 阅读
2 回答3.2k 阅读✓ 已解决
3 回答6.9k 阅读✓ 已解决
3 回答3k 阅读✓ 已解决
5 回答4.6k 阅读
4 回答2.3k 阅读
3 回答4.4k 阅读
我觉得靠谱的就是验证码一类,或者提交之后重定向,你只在按钮上下功夫,我如果直接从浏览器发起请求不走按钮就没用了。