如何避免表单重复提交信息

更新: 2016-07-21 19:39 作者:

开发程序时,页面时常用到表单提交,与后台交互,这时候都要考虑表单重复提交数据的问题,假设用户多次点击提交按钮,出发多次提交事件,造成后台有可能出现多余的重复数据。使用Token令牌来解决这个问题,token令牌代表执行某些操作的权利的对象,这里使用会话令牌(Session Token),交互会话中唯一的身份标识。

首先创建一个生成令牌的工具类,然后开始编写该工具类。

如何避免表单重复提交信息

我这里采用单例模式,单例模式是一种常用的软件设计模式。通过单例模式可以保证一个类只有一个实例并且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。单例模式需要满足三点:

如何避免表单重复提交信息

编写生成token的方法,这个工具类编写完成。生成令牌方法如下所示:

如何避免表单重复提交信息

在编写跳转到填写信息的页面方法时,调用token工具类创建令牌,并且放到session会话中。例如:

如何避免表单重复提交信息

页面的form表单如下,将存入session会话中的token令牌写到form表单中,一起提交。

如何避免表单重复提交信息

编写一个方法,验证用户是否重复提交了表单,重复提交表单返回true,否则返回false,分为3种情况判断用户是否重复提交表单。

1、如果用户提交的表单数据中没有token,则用户是重复提交了表单

2、如果当前用户的Session中不存在Token(令牌),则用户是重复提交了表单

3、存储在Session中的Token(令牌)与表单提交的Token(令牌)不同,则用户是重复提交了表单。

具体代码如下:

如何避免表单重复提交信息

编写提交方法,首先调用步骤6的方法进行验证,如果非重复提交,那么移除session中的token令牌,执行下边的操作。

如何避免表单重复提交信息

还可以通过js控制,当重复提交时点击提交按钮无效,定义一个变量标识是否重复提交,通过这个变量的值的变化进行判断,是否触发提交事件。例如:

如何避免表单重复提交信息

以上仅供参考,如果有不足的地方欢迎指正。

本篇经验经过个人经历所写,纯属原创,如果需要帮助可以留言,我会回的哦!