表单重复提交处理方式

前言

  今天去招聘会面试时,被问到了如何处理表单重复提交的问题,一开始有想到使用Session,但没有跟面试官讲,后来面试官有事离开了一下,自己好好地理顺了一下思路,面试官回来后,跟面试官从客户端到服务端讲解如何处理表单重复提交。面试结束后,觉得仍有所遗落,特地寻找了相关资料,重新学习了一下,特此记录。

  在说明处理方案前,我们先来列举一下有哪些情况会出现表单重复提交的情况,接着我们从客户端到服务端的顺序逐一说明处理方案。

  1. 多次点击提交按钮
  2. 提交表单后,点击浏览器的后退按钮
  3. 使用浏览器的历史记录重复提交表单
  4. 点击浏览器的刷新按钮

若有读者发现仍有其它重复提交表单的情况,欢迎留言提出,谢谢。

客户端角度

  1. 在提交表单后,使用JS将提交按钮disable。这种方法可以防止用户多次点击提交按钮,但若是客户端禁止了js或者用户知道表单提交的地址以及表单的结构,自行生成表单进行重复提交,该方法也就无效了。
  2. 在请求表单页面时,服务端生成一个能够标识的特殊标志串,存在Session中,并放在表单的隐藏域里。服务端接收处理表单数据时,检查标识串与Session中的标识串是否一致,若一致表明是首次提交,则立即从哪Session中删除,然后正常处理数据,否则不再处理。
  3. 使用Cookie记录表单提交的状态,根据其状态可以检查是否已经提交表单。若客户端禁止了Cookie,该方法将不起作用。

服务端角度

  1. 使用Post/Redirect/Get模式,简单来说就是提交表单后,执行一次客户端的重定向,转到提交成功信息提示页面。这种方式能够避免客户重复按刷新和点击后退按钮导致的重复提交表单。
  2. 在数据库里添加唯一约束或者创建唯一索引,防止出现重复数据。这也是一种防止重复提交表单数据的方式。

注:读者有其他处理方式,欢迎留言或者E-mail交流:woodyoilovecn@gmail.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值