表单重复提交在Web应用中很常见,常见的应用场景有:
- 用户心切狂点按钮
- 刷新浏览器
- 点击浏览器后退按钮继续提交
- 重复的http请求
防止表单重复提交的几个策略
- 禁掉提交按钮:表单提交后用javascript禁用提交按钮,可以防止多次点击提交按钮导致重复提交。但不能防止其他情形。
- 使用post-redirect-get模式,提交后重定向。这种方式可以防止刷新浏览器,也能防止点击浏览器后退按钮的问题。
- 类似于struts2的解决方案,在提交之前现在session中生成一个token,并将其保存在表单中或发给客户端,提交时作为一个参数。接收表单数据时检查session中是否有该标识,有则将其移除,没有则认为重复提交。
- 数据库添加唯一索引,某些时候可以在数据库添加唯一索引可以很好解决重复数据问题。
以上是经验之谈,如有不对请指正,欢迎更多克服重复提交的好方案。