最近我正在做一个项目,使用ajax调用java servlet,请求需要超过10秒才能得到响应,所以我需要确保在此期间用户将无法提交表单再次,我当前的方法是检测提交按钮单击事件并禁用提交按钮,一旦在ajax中触发成功或错误函数,则再次启用该按钮,但这不是一个好方法。
---- 编辑 ---- 抱歉,我没有解释清楚,我的意思是这可以阻止非技术背景用户,但如果有人打算攻击该网站或任何原因, 他们只需修改 html 代码即可启用该按钮,然后再次提交,
之前我尝试过另一种方法,即在表单提交后设置cookie间隔,并在请求完成时检查cookie,但只是想知道是否还有其他方法可以做到这一点,这个问题纯粹是为了学习目的。
对不起我的英语:)
最佳答案
我不认为禁用该按钮有什么问题,这是我经常使用的,因为这不仅表明系统已确认您的点击,而且还可以防止用户再次点击。
如果由于某种原因您不喜欢这样,您可以禁用底层方法调用,如下所示:
var isSubmitting = false;
function handleClick(){
if (!isSubmitting)
{
isSubmitting = true;
$.ajax(
"http://yourservice/submit" {
data: {someData:123},
contentType: 'application/json',
type: 'POST',
success: function(){
isSubmitting = false;
},
});
}
}
关于您的编辑,cookie 听起来是一个好方法,基本上您需要服务器将传递给客户端的内容,然后检查提交。一旦获得授权,服务器将阻止处理具有相同参数的进一步请求。
但请记住,恶意用户会产生数千个获取 cookie 的请求,然后执行所有提交,因此这并不是真正针对攻击者的防御,因为您必须实现某种形式的 throttling .
所以最后,如果您只是想防止意外提交,隐藏按钮就足够了。
关于java - 防止双重表单提交的最佳实践是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30228141/