首页 > 其他分享 >防止表单重复提交的方法

防止表单重复提交的方法

时间:2023-05-19 14:22:23浏览次数:28  
标签:提交 重复 表单 session subToken 防止

1.通过JavaScript屏蔽提交按钮(不推荐)

通过js代码,当用户点击提交按钮后,屏蔽提交按钮使用户无法点击提交按钮或点击无效,从而实现防止表单重复提交。

ps:js代码很容易被绕过。比如用户通过刷新页面方式,或使用postman等工具绕过前段页面仍能重复提交表单。因此不推荐此方法。

2.给数据库增加唯一键约束(简单粗暴)

在数据库建表的时候在ID字段添加主键约束,用户名、邮箱、电话等字段加唯一性约束。确保数据库只可以添加一条数据。

3.利用Session防止表单重复提交(推荐)

实现原理:

服务器返回表单页面时,会先生成一个subToken保存于session,并把该subToen传给表单页面。当表单提交时会带上subToken,服务器拦截器Interceptor会拦截该请求,拦截器判断session保存的subToken和表单提交subToken是否一致。若不一致或session的subToken为空或表单未携带subToken则不通过。

首次提交表单时session的subToken与表单携带的subToken一致走正常流程,然后拦截器内会删除session保存的subToken。当再次提交表单时由于session的subToken为空则不通过。从而实现了防止表单重复提交。

4.使用AOP自定义切入实现

实现原理:

  1. 自定义防止重复提交标记(@AvoidRepeatableCommit)。
  2. 对需要防止重复提交的Controller里的mapping方法加上该注解。
  3. 新增Aspect切入点,为@AvoidRepeatableCommit加入切入点。
  4. 每次提交表单时,Aspect都会保存当前key到reids(须设置过期时间)。
  5. 重复提交时Aspect会判断当前redis是否有该key,若有则拦截。

标签:提交,重复,表单,session,subToken,防止
From: https://www.cnblogs.com/october-sy/p/17415007.html

相关文章

  • elementui 表单验证
    ————————————————版权声明:本文为CSDN博主「橙-极纪元」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/cplvfx/article/details/125329481介绍Form组件提供了表单验证的功能,只需要通过rules属性传入......
  • 代码随想录算法训练营第九天|28. 找出字符串中第一个匹配项的下标、459. 重复的子字符
    【参考链接】28.找出字符串中第一个匹配项的下标【注意】1.kmp解决的就是字符串匹配的问题。2.kmp如何知道匹配过哪些字符串,并跳到匹配过的内容后面的字符。---前缀表3.找到一个子字符串里它的最长相等前后缀。4.前缀是包含首字母,不包含尾字母的所有子串;后缀只包含尾字母,不......
  • 一张图解析FastAdmin中的FormBuilder表单生成器
     功能描述在使用FastAdmin一键生成CRUD后,默认的生成的都是原生HTML的组件代码,会有许多不熟悉前端的小伙伴改动起来会比较费劲。其实在FastAdmin中有一个简单的FormBuilder,但是它只能生成一些简单的文本框或下拉框,像FastAdmin中常用的动态下拉框、城市选择框、联动框,它就没法实......
  • 不重复的三位数
    自然语言解决问题:求互不相同的三位数,可以一位一位的去确定,先确定百位、再确定十位、个位,再将各位上的数值进行比较,若互不相同则输出流程图: 具体代码:#include<stdio.h>intmain(){ inta,b,c,d; printf("由1,2,3,4组成的不重复三位数都有\n"); for(a=1;a<5;a++){ for(b=1;b<5;......
  • 创建联系表单很容易!响应式UI组件库Kendo UI for Vue轻松搞定
    KendoUI致力于新的开发,来满足不断变化的需求。KendoUIforVue使用旨在提高性能和丰富用户体验的Vue组件,帮助开发人员构建下一代应用程序。它是为Vue技术框架提供可用的KendoUI组件,以便更快地构建更好的Vue应用程序。联系表单用于在网站上发送和接收用户信息的表单。EmailJS是......
  • git 清理commit中历史提交记录的大文件
    git清理commit中历史提交记录的大文件起源是公司需要把代码仓库同步到另外一个代码仓库,结果另外一个仓库被限制大文件超过64M提交,所以会同步失败。刚开始我直接把大文件压缩到64m以内,结果还是同步失败。后来才知道是因为提交记录里面有包含大文件的信息也要删除才行。具体操作......
  • IDEA git提交速度慢
    背景:升级了版本2022.1.3后commitpush都很慢原因:Git速度慢解决方法,亲测速度超快.ideagit操作卡慢解决办法,可以试试:将%IntelliJIDEA%\bin目录下的runnerw.exe和runnerw64.exe改成runnerw.exe.bak和runnerw64.exe.bak,重启Idea,commit代码即可生效.......
  • 【Antd】表单调整输入框对齐方式:
    constformItemLayout={labelCol:{//左边文字xs:{span:24},sm:{span:6},},wrapperCol:{//右边输入框xs:{span:24},sm:{span:16},},};consttailFormItemLayout={wrapperCol:{xs......
  • Django authenticate() 函数查找不到与提交的用户名和密码匹配的用户,则会返回 None。
    在你的userAPP下面添加一个utils.py文件classUsernameMobileBackend(ModelBackend):defauthenticate(self,request,username=None,password=None,**kwargs):"""重写人做方法"""#使用账号查询运河#如果用户名查询到用......
  • git提交大文件无法推送到远程库
      提交大文件失败错误 执行获取大文件路径 删除gitfilter-branch--tree-filter'rm-f"大文件路径"'HEAD  成功提示 成功后重新提交推送就可以了......