简单处理表单重复提交问题
之前写过一篇防止表单重复提交的博文,主要是介绍PRG设计模式的原理,相对比对理论化的一篇,今天给个简单有效的PHP实现.
方案的主要原理是,当用户在后台提交POST请求成功后,采用heaer在服务器端进行跳转(302重定向),这样在用户提交成功后刷新页面不会出现重复提交POST请求的问题.
需要注意的是,在服务器端通过302跳转只能解决提交成功响应后刷新页面重复提交问题,并不能解决POST交响应中服务器还未返回响应时刷新页面造成的重复提交.
PHP实现代码如下:
header(‘Location: 替换成提交完成后页面地址‘ );
服务器响应POST请求跳转HTTP请求状态
提交服务端暂未响应前刷新页面会造成重复提交
引用资料:
- http://me.doucl.com/archives/other/post-redirect-get-prg-pattern.html
- http://en.wikipedia.org/wiki/Post/Redirect/Get
每次提交之前不是都要去数据库验证,是否有重复信息吗?
数据验证数据重复性和重复提交动作是两个概念,数据重复不一定是因为多次点击提交按钮或POST提交时刷新页面造成的。
这里提到的重复提交只是简单处理POST提交时刷新页面造成的重复提交,如果要严格保证数据记录唯一性,是有在服务端验证数据的必要的。