java - 防止双重表单提交的最佳实践是什么

标签 java javascript jquery ajax forms

最近我正在做一个项目,使用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/

相关文章:

javascript - 将变量传递给自调用函数

javascript div 关闭问题

java - 查找多模块 Maven 项目的代码覆盖率

java - Tomcat 服务器上的 SSL 证书

java - 字符串消息按字符划分 10 个字符

javascript - ShadowMap 未使用 Three.js 在网格上转换阴影

javascript - 从 Json 数组中过滤值 (JavaScript)

javascript - 标准模式下 IE8 的 jQuery 圆 Angular 代码?

javascript - 如何选择最接近的下一个所有元素

java - 连接池 MySQL 连接与 SSH(JSch)