热门标签 | HotTags
当前位置:  开发笔记 > 开放平台 > 正文

javascript-如何组织form重复提交

背景:今天被测试提了一个bug,很纳闷,因为这个bug是:没有禁止表单重复提交。顿时感觉form表单真是无处不在。一般我们不做重复提交的处理,有些地方会使用js禁止提交按钮的方式,但也仅限于通过js提交的表单。...

背景:
今天被测试提了一个bug,很纳闷,因为这个bug是:没有禁止表单重复提交。顿时感觉form表单真是无处不在。

一般我们不做重复提交的处理,有些地方会使用js禁止提交按钮的方式,但也仅限于通过js提交的表单。

于是各种百度,有说使用session做标记的,根据标记来判断是否第一次提交,但想想这种方式对后端来说比较复杂,而且session也比较贵。

今天测试提的bug顿时让我毫无头绪了,因为这个表单是同步提交的,根本没有js参与。更不可能为所有的同步表单都写一套js。

那么,面对同步提交表单的这种情况,大家是如何解决重复提交问题的呢?
提出你的锦囊妙计吧!

回复内容:

背景:
今天被测试提了一个bug,很纳闷,因为这个bug是:没有禁止表单重复提交。顿时感觉form表单真是无处不在。

一般我们不做重复提交的处理,有些地方会使用js禁止提交按钮的方式,但也仅限于通过js提交的表单。

于是各种百度,有说使用session做标记的,根据标记来判断是否第一次提交,但想想这种方式对后端来说比较复杂,而且session也比较贵。

今天测试提的bug顿时让我毫无头绪了,因为这个表单是同步提交的,根本没有js参与。更不可能为所有的同步表单都写一套js。

那么,面对同步提交表单的这种情况,大家是如何解决重复提交问题的呢?
提出你的锦囊妙计吧!

Onclick="this.disabled=true" 这么简单的一句代码用的着写一套???

对于前端来说, 防止重复提交是必须做的...
当然后端视情况要不要加, 因为前端只能防止用户手动多次点击, 但是没有办法阻止模拟请求

session设个过期时间,利用数据库唯一性(提交了是插到数据库吗),提交了本地存个COOKIE,第二次提交判断下有木有

一个结果,n种方法。
session(或者COOKIE)虽然比较贵但也可以说是比较节省的,毕竟其他方法还要进行新的模块调用(cache,db)
session_id就可以判断啊。

我支持禁用提交。其实并不复杂,提取出一个公共逻辑即可,并不需要对每个表单独写一套。

防止重复提交,说到底就是防止一个逻辑执行多次。然而要求后端完全幂等是不可能的,create操作就是个反例。因此更好的实践便是从前端入手。

推荐阅读
  • 在Ubuntu上安装MySQL时解决缺少libaio.so.1错误及libaio在MySQL中的重要性分析
    在Ubuntu系统上安装MySQL时,遇到了缺少libaio.so.1的错误。本文详细介绍了如何解决这一问题,并深入探讨了libaio库在MySQL性能优化中的重要作用。对于初学者而言,理解这些依赖关系和配置步骤是成功安装和运行MySQL的关键。通过本文的指导,读者可以顺利解决相关问题,并更好地掌握MySQL在Linux环境下的部署与管理。 ... [详细]
  • 在影视剪辑中,配音是至关重要的环节。通常有两类选择:一是使用专业软件进行他人配音,二是由制作者亲自上阵。使用专业软件时,可以通过在线平台如百度配音,输入解说词并选择合适的声音进行合成,确保音质和效果的专业性。而自行配音则更灵活,能够更好地传达创作者的情感和意图,但对录音设备和环境有较高要求。两种方式各有利弊,需根据具体项目需求和个人条件综合考虑。 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • 解析 /etc/pki/tls/certs/cabundle.crt 文件的主要功能与应用场景 ... [详细]
  • 在编程笔试和面试中,全排列算法因其适中的难度而备受青睐,不仅能够考察应聘者的算法基础,还能测试其对递归和回溯的理解。本文将深入解析全排列算法的实现原理,探讨其应用场景,并提供优化建议,帮助读者更好地掌握这一重要算法。 ... [详细]
  • PHP网站日志深度解析与数据洞察分析
    通过对PHP网站日志进行深入解析与数据洞察分析,可以有效提升网站性能和用户体验。由于网站日志数据量庞大,通常需要借助专业的日志分析工具来处理。常用的工具包括光年日志分析工具和WebLog Expert等,这些工具能够帮助技术人员快速识别并解决网站运行中的各种问题,从而优化SEO效果和提升整体运营效率。 ... [详细]
  • 七款高效编辑器与笔记工具推荐:KindEditor自动换行功能解析
    本文推荐了七款高效的编辑器与笔记工具,并详细解析了KindEditor的自动换行功能。其中,轻笔记QingBiJi是一款完全免费的记事本软件,用户可以通过其简洁的界面和强大的功能轻松记录和管理日常事务。此外,该软件还支持多平台同步,确保用户在不同设备间无缝切换。 ... [详细]
  • 在前文探讨了Spring如何为特定的bean选择合适的通知器后,本文将进一步深入分析Spring AOP框架中代理对象的生成机制。具体而言,我们将详细解析如何通过代理技术将通知器(Advisor)中包含的通知(Advice)应用到目标bean上,以实现切面编程的核心功能。 ... [详细]
  • 在SQL Server 2008数据库迁移过程中,备份方法是一种高效且可靠的导出手段。本文详细介绍了如何利用备份功能实现数据的快速迁移,并提供了具体的步骤和注意事项,适合Golang程序员和数据库管理员参考。 ... [详细]
  • 移动搜索格局已定,切勿误解微信搜索的真正实力
    近期,微信新版本的内测界面曝光,新增了朋友圈搜索和附近商户搜索功能。种种迹象显示,微信正不断强化其搜索能力。尽管移动搜索市场格局已基本稳定,但不应低估微信搜索的潜力。微信不仅在聊天工具、移动浏览器和新闻阅读等领域持续发力,还在通过搜索功能进一步巩固其在移动互联网领域的地位。 ... [详细]
  • 题目要求将数字字符串转换为对应的字母组合,例如“111”可以转化为“AAA”、“KA”或“AK”。本文通过深入解析暴力递归方法,详细探讨了这一问题的解法,并结合真实的 Facebook 面试题目,提供了从左至右尝试模型的具体实现和优化策略。 ... [详细]
  • 投融资周报 | Circle 达成 4 亿美元融资协议,唯一艺术平台 A 轮融资超千万美元 ... [详细]
  • 如何在 Angular 4 中实现跨域调用百度人脸识别 API? ... [详细]
  • PHP开发人员薪资水平分析:工程师平均工资概况
    PHP开发人员薪资水平分析:工程师平均工资概况 ... [详细]
  • Linux入门教程第七课:基础命令与操作详解
    在本课程中,我们将深入探讨 Linux 系统中的基础命令与操作,重点讲解网络配置的相关知识。首先,我们会介绍 IP 地址的概念及其在网络协议中的作用,特别是 IPv4(Internet Protocol Version 4)的具体应用和配置方法。通过实际操作和示例,帮助初学者更好地理解和掌握这些基本技能。 ... [详细]
author-avatar
赤木律孑
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有