重复提交控制
来源:互联网 发布:风云纯网络防火墙 编辑:程序博客网 时间:2024/05/19 14:50
在项目的开发过程中,经常会遇到重复提交的问题,特别是网速不好的时候,用户经常会认为没有点击到,然后重复点击,这样很容易造成保存数据重复等,严重的时候,比如支付则可能造成重复支付,严重影响用户体验,如何解决这类问题呢?
要解决这个问题,根据web的原理,可以分为从客户段控制,服务器端控制,客户端服务器端联合控制三种情况。
客户端控制,最简单的实现就是点击按钮后,将按钮变灰,这时按钮已经不可以再次点击,只有当请求处理完成后,才可以根据返回结果情况继续进行操作,这样即能保证用户不会由于误操作造成重复提交,缺点是每次点击按钮后,都要手动更改按钮状态,程序实现起来比较麻烦。
在客户端控制中,也可以通过客户端请求框架来实行统一控制,即当用户点击时,程序判断出是由哪个按钮进行操作导致的请求,知道操作按钮后,将该按钮变灰,请求返回以后,再将按钮变为可用状态,这样则直接将问题变成了如何判断出是否由某个按钮触发,很不幸由于js在各个浏览器中不能通用,有些浏览器没法直接获取事件来源对象,这样则只有通过对按钮增加一个绑定事件,标识出来源按钮来识别。通过这种方式,则不需要程序去特别处理这类问题,只要框架实现就行了,当然问题就是如果程序去掉了所有按钮事件,那就无能为力了。
另外,客户端控制也有一定的问题,假如请求返回回来后,程序已经将按钮重新变为可用,但是这时程序出错,导致页面没有关闭,则这个时候客户又可以点击了,当然这种情况只会再极特许的情况下出现(一般程序上线前,都会有严格的测试,而且数据返回后也会通过一定的形式通知用户),但在要求严格控制的系统中,这种情况也应该避免。
服务器端控制,在数据保存的时候,通过预先查询的形式,如果数据库中已经有相同的数据,则提示数据已存在,然后在前台提示用户数据已存在,这种方式用户体验不是太好,一般很少采用
客户端服务器端联合控制,在要求严格的控制中,像支付页面,要求打开一个页面一定只能进行一次支付,单纯的采用客户端控制还是有一定的风险,如是有了这样的控制方法。在页面打开时,服务器会生成一个唯一ID,保存到用户的session中,同时这个ID也会页面中存在,当用户提交,后台进行处理时,会先判断提交的ID与用户session中的ID是否一致,如果一致,则将session中ID清除(防止下一次重复处理),然后进行数据处理操作,当出现重复点击时,由于该ID已经处理掉,则后台服务器能清楚的知道这个请求是重复的,这种实现程序实现起来比较麻烦,除了在极其要求严格的系统功能中,不然一般不用。- struts控制重复提交
- 重复提交控制
- 使用JavaScript控制重复提交
- js控制表单重复提交
- JSP控制表单重复提交
- javascript控制页面表单重复提交
- Spring2.5MVC实现控制重复提交
- 控制重复提交(表单spring,js等)
- 控制浏览器刷新时页面重复提交
- java WEB 控制重复提交请求
- 禁止重复提交(JavaScript控制表单…
- csdn博客控制重复提交的方法
- javaWeb中用Session控制表单重复提交(9)
- JavaWeb初级学习 之 会话控制&表单重复提交问题
- 重复提交
- 重复提交
- 重复提交
- 提交按钮重复提交
- Canvas物体碰撞
- 关于浮动的一些个人见解
- 美国VPS淘宝购买地址
- 关于cts测试的一些总结(二)
- BeautifulSoup
- 重复提交控制
- Spring MVC与JAX-RS比较与分析
- 搜索引擎工作原理
- VOIP如何保持后台监听
- Level Design of Programmer
- 滑动控件Slider
- 在Solaris SPARC上安装JDK和JBoss
- c语言运算符优先级存在的问题
- Android中获取应用程序(包)的信息(launcher获取系统应用)