`

防止用户将表单重复提交的方法汇总

 
阅读更多

转载自这里:http://www.jb51.net/web/248680.html

表单重复提交是在多用户Web应用中最常见、带来很多麻烦的一个问题。有很多的应用场景都会遇到重复提交问题,比如:

点击提交按钮两次。 点击刷新按钮。 使用浏览器后退按钮重复之前的操作,导致重复提交表单。 使用浏览器历史记录重复提交表单。 浏览器重复的HTTP请求。

  几种防止表单重复提交的方法

  1.禁掉提交按钮。表单提交后使用Javascript使提交按钮disable。这种方法防止心急的用户多次点击按钮。但有个问题,如果客户端把Javascript给禁止掉,这种方法就无效了。

  我之前的文章曾说过用一些Jquery插件效果不错。

  2.Post/Redirect/Get模式。在提交后执行页面重定向,这就是所谓的Post-Redirect-Get (PRG)模式。简言之,当用户提交了表单后,你去执行一个客户端的重定向,转到提交成功信息页面。

  这能避免用户按F5导致的重复提交,而其也不会出现浏览器表单重复提交的警告,也能消除按浏览器前进和后退按导致的同样问题。

  3.在session中存放一个特殊标志。当表单页面被请求时,生成一个特殊的字符标志串,存在session中,同时放在表单的隐藏域里。接受处理表单数据时,检查标识字串是否存在,并立即从session中删除它,然后正常处理数据。

  如果发现表单提交里没有有效的标志串,这说明表单已经被提交过了,忽略这次提交。

  这使你的web应用有了更高级的XSRF保护。

  4.在数据库里添加约束。在数据库里添加唯一约束或创建唯一索引,防止出现重复数据。这是最有效的防止重复提交数据的方法。

以上就是这4种方法的介绍了,小伙伴们如果有更好的解决方法,也请告之。

分享到:
评论

相关推荐

    PHP防止表单重复提交的几种常用方法汇总

    在实际开发中,开发者可以结合具体情况,选择一种或多种方法组合使用,以达到最佳的防止表单重复提交的效果。总的来说,这些方法都能够有效地减少因表单重复提交导致的用户体验问题和系统资源浪费,是PHP项目开发中...

    网页表单提交方式详细汇总

    本文主要探讨了网页表单的提交方式,包括不同类型的提交按钮和防止表单重复提交的方法。 1. **通用提交按钮**: 在HTML中,我们可以使用`<input>`元素创建一个提交按钮,只需将`type`属性设置为`submit`。例如: ...

    php防止网站被刷新的方法汇总

    这种方法可以防止简单的重复提交,但可能不适用于复杂的攻击场景。 3. **独立文件调用**: 在WordPress或其他网站中,为了方便管理和维护,可以将防刷新代码放入一个单独的PHP文件,如`forbiddenCC.php`,然后在每...

    php面试题汇总-121617591

    隔离性防止并发事务间的相互影响,常见的隔离级别有读未提交、读已提交、可重复读和串行化。持久性意味着一旦事务提交,其结果将永久保存,即使系统崩溃也能恢复。 **其他相关PHP知识点:** 4. **PHP时间函数的...

    WEB前端测试点汇总整理

    【WEB前端测试点汇总整理】 在进行WEB前端测试时,我们需要关注多个方面,包括功能、性能和安全等关键要素,确保应用的稳定性和用户体验。以下是一些常见的测试点: 1. **输入框测试** - **字符型输入框**:测试...

    Java面试题汇总

    - **Struts2传值机制**:依赖于Action类中的属性,通过页面表单提交数据到Action的属性中,利用OGNL表达式实现数据绑定。 - **特点**: - 动态模型驱动:支持动态数据绑定,简化开发过程。 - 拦截器:用于拦截请求...

    javascript事件汇总

    - **触发时机**:当表单被提交时触发。 - **应用场景**:发送表单数据到服务器。 #### 五、滚动字幕事件 1. **`onbounce`**: - **触发时机**:当Marquee元素内部的内容移动到显示范围之外时触发。 - **应用...

    3嵌入式软件可靠性设计规范汇总checklist.docx

    ### 嵌入式软件可靠性设计规范汇总 嵌入式软件作为现代电子设备的重要组成部分,在汽车、医疗设备、工业控制系统等多个领域发挥着至关重要的作用。为了确保这些设备能够安全、可靠地运行,制定一套完善的软件可靠性...

    (学软件编程需必学的英语)第一学期英文单词汇总

    - **hidden**:隐藏字段,用户不可见但会随表单提交的数据。 #### 第三章:表格结构 - **row**:行,表格中的水平线。 - **column**:列,表格中的垂直线。 - **cell**:单元格,表格中的单个数据项。 - **spacing*...

    WEB网站常用测试用例集

    - 功能操作完成后,刷新页面或使用IE的后退键可能导致重复提交。 - 功能键反应时间延迟时,短时间内重复点击容易造成重复提交。 **13. 防止SQL注入式攻击** - 不允许直接在JSP页面调用SQL语句。 **14. 用户非授权...

    2022最新Java面试题常见面试题与答案汇总0001.pdf

    本文将详细解析2022年最新的Java面试题,涵盖Java基础、容器、多线程、反射等多个核心模块,旨在帮助面试者和Java程序员提升技能,查漏补缺。 一、Java基础 1. JDK包含Java运行环境(JRE)和开发工具,JRE仅包含...

    K3+Cloud+BOS+业务配置百问百答.doc

    - **解决方法**: 在BOS平台上,用户可以通过“汇总”功能设置需要汇总的字段,并指定汇总方式(如求和、平均等)。 **1.4 BOS报表引出问题** - **背景**: 使用BOS报表过程中可能会遇到一些技术问题。 - **解决方法*...

    Yii使用技巧大汇总

    在控制器中,可以使用`CSession`或令牌(token)机制来防止表单的重复提交。例如,可以在表单中添加隐藏字段,每次提交后更新该字段的值,服务器端检查该值是否有效,无效则拒绝处理请求。 以上是Yii框架的一些...

    158道软件测试经典面试题及答案汇总

    答:测试一个网站涉及功能测试(如链接有效性、表单提交、用户登录等)、性能测试(加载速度、并发用户数)、兼容性测试(不同浏览器、操作系统、设备)、安全性测试(SQL注入、XSS攻击等)和可用性测试(用户界面...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例151 通过POST方法提交表单元素 182 实例152 通过$_POST方法获取表单元素 182 实例153 通过GET方法提交表单元素 184 实例154 通过$_GET方法获取表单元素 185 3.2 文本框组件的应用 186 实例155 以文本域的形式...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例151 通过POST方法提交表单元素 182 实例152 通过$_POST方法获取表单元素 182 实例153 通过GET方法提交表单元素 184 实例154 通过$_GET方法获取表单元素 185 3.2 文本框组件的应用 186 实例155 以文本域的形式...

Global site tag (gtag.js) - Google Analytics