防止表单重复提交思路分析

出现重复提交的场景一般是在网速比较慢,服务器返回时间较长,导致用户以为没有提交成功或者习惯性的多点几次提交按钮。开发中必须杜绝重复提交问题。

一、出现重复提交表单的场景

场景一:在网络延迟的情况下让用户有时间点击多次submit按钮导致表单重复提交;

场景二:表单提交后用户点击【刷新】按钮导致表单重复提交;

场景三:用户提交表单后,点击浏览器的【后退】按钮回退到表单页面后进行再次提交。

二、利用JavaScript防止表单重复提交

除了用这种方式之外,经常见的另一种方式就是表单提交之后,将提交按钮设置为不可用,让用户没有机会点击第二次提交按钮,代码如下:

使用JavaScript防止表单重复提交的做法只对上述提交到导致表单重复提交的三种场景中的【场景一】有效,而对于【场景二】和【场景三】是没有用,依然无法解决表单重复提交问题。

三、利用Session防止表单重复提交

对于【场景二】和【场景三】导致表单重复提交的问题,既然客户端无法解决,那么就在服务器端解决,在服务器端解决就需要用到session了。

具体的做法: 在服务器端生成一个唯一的随机标识号,专业术语称为Token(令牌),同时在当前用户的Session域中保存这个Token。然后将Token发送到客户端的Form表单中,在Form表单中使用隐藏域来存储这个Token,表单提交的时候连同这个Token一起提交到服务器端,然后在服务器端判断客户端提交上来的Token与服务器端生成的Token是否一致,如果不一致,那就是重复提交了,此时服务器端就可以不处理重复提交的表单。如果相同则处理表单提交,处理完后清除当前用户的Session域中存储的标识号。
在下列情况下,服务器程序将拒绝处理用户提交的表单请求:

四、利用redis锁机制

key值可以是请求路径+用户的唯一标识,在finally中释放锁或者结合设置key过期时间。

另外,防止用户重复支付也可以应用,key为订单号,配合数据库订单支付状态查询判断。幂等性接口设计。

Original: https://www.cnblogs.com/better-farther-world2099/p/10495322.html
Author: 奕锋博客
Title: 防止表单重复提交思路分析

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/685403/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • ArcGIS Pro地图范围和视野范围

    csharp;gutter:true; atialReference sr3857 = SpatialReferenceBuilder.CreateSpatialReference…

    技术杂谈 2023年5月30日
    078
  • delphi获取文件的创建/修改时间、按时间删除指定文件下的文件

    uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, S…

    技术杂谈 2023年5月31日
    097
  • 8086汇编 杂项案例

    8086汇编 杂项案例 一、案例1 问题:完成下面的程序,利用栈,将程序中定义的数据逆序存放。 注:利用栈实现数据的逆至1)创建字存储数据2)将数据存放到通用寄存器3)将通用寄存器…

    技术杂谈 2023年6月1日
    097
  • ORA-01810:格式代码出现两次 解决方法

    在写一个sql插入数据库的时候 to_date(‘20140509131034′,’yyyyMMddHHmmss’) 原因是java中的年月日和oracle中的年月日表示形式不一样…

    技术杂谈 2023年5月30日
    0100
  • Django 报ckeditor/skins/moono/skin.js 404

    环境: Django:v3.2.5 (pip list查看版本号) django-ckeditor:v6.1.0 bug描述:在admin后台,进行编辑文章的时候,在console…

    技术杂谈 2023年6月21日
    084
  • go-结构体内存布局

    方式一:通过 var 声明结构体 在 Go 语言中当一个变量被声明的时候,系统会自动初始化它的默认值,比如 int 被初始化为 0,指针为 nil。 var 声明同样也会为结构体类…

    技术杂谈 2023年7月11日
    065
  • B树-插入

    B树系列文章 1. B树-介绍 2. B树-查找 3. B树-插入 4. B树-删除 插入 根据B树的以下两个特性 每一个结点最多有m个子结点 有k个子结点的非叶子结点拥有 k −…

    技术杂谈 2023年6月21日
    095
  • 初识CityEngine【转】

    一、CityEngine历史 二、CityEngine建模思想 1、生成城市地块 2、楼层房间切割 3、建模思想、流程 (1)、建筑生成思想 (2)、官方示意流程图 三、CityE…

    技术杂谈 2023年5月31日
    089
  • Nginx平滑升级版本

    Nginx平滑升级版本 一, 查看现目前版本,准备预升级版本的安装包 #查看nginx版本 /usr/local/nginx/sbin/nginx -v #测试nginx访问是否正…

    技术杂谈 2023年7月11日
    098
  • 理论知识

    多线程的实现方式:1.继承Thread类;2.实现runnable接口;3.实现callable接口通过futrueTask包装器来创建Thread线程; 是继承Thread类号还…

    技术杂谈 2023年6月21日
    096
  • 关于棣莫弗定理证明的一个延拓

    1.复数 我们把形如a+bi的数称为复数,其中a称为实部,b称为虚部,i称为虚数单位,a,b∈R. 在复平面内,任何一个复数都可以表示为r(cosθ+isinθ)的形式,其中,θ叫…

    技术杂谈 2023年5月31日
    098
  • 从OC角度思考OKR的底层逻辑

    原创不易,求分享、求一键三连 扩展阅读:什么是OKR OC:Organization Cultrue即组织文化,标题用OC纯粹为了装逼… ​自从接受公司文化建设工作后,…

    技术杂谈 2023年6月1日
    0118
  • 关于typedef的使用方法

    在计算机编程语言中用来为复杂的声明定义简单的别名。与宏定义有些差异。它本身是一种存储类的keyword,与auto、extern、mutable、static、register等k…

    技术杂谈 2023年5月31日
    092
  • Bot Style Tests VS Page Objects

    Bot Style Tests 一个 bot是基于Selenium APIs 面向操作的抽象。这意味着如果你发现命令对你的应用程序没有做正确的事情,改变他们很容易。 bst.py …

    技术杂谈 2023年5月31日
    085
  • 使用python操作HDF5文件

    HDF Hierarchical Data Format,又称HDF5 安装: pip install h5py 对于数据集需要:先创建h5文件,再去读h5文件将dataset放在…

    技术杂谈 2023年7月25日
    070
  • 在线标准程序员计算器

    摘自:https://tooltt.com/calc/ 在线标准程序员计算器 提供在线计算、科学计算、电子计算、函数计算与统计等在线计算功能。 https://tooltt.com…

    技术杂谈 2023年5月31日
    097
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球