php解决和避免form表单重复提交的几种方法


Posted in PHP onAugust 31, 2016

前言

为什么要避免form表单被重复提交呢?因为我们不想让我们的服务器重复处理没必要的数据,同时我们也是避免我们的数据库产生重复的数据,避免表单重复提交也是让我们的网站更安全的一种表现。

先看一下有哪些情况下回导致表单重复提交呢,知道哪些情况下可能会出现表单重复提交就可以从根源处理表单重复提交的情况了。

下面的情况就会导致表单重复提交:

      点击提交按钮两次。

      点击刷新按钮。

      使用浏览器后退按钮重复之前的操作,导致重复提交表单。

      使用浏览器历史记录重复提交表单。

      浏览器重复的HTTP请求。

      网页被恶意刷新。

下面是几种解决办法:

一:利用js设置按钮点击后变成灰色

<form name=form1 method=”POST” action=”/” target=_blank>

<p>

<input type=”text” name=”T1″ size=”20″>

<input type=”button” value=”提交” onclick=”javascript:{this.disabled=true;document.form1.submit();}”>

</p>

</form>

点击完按钮之后变成灰色就不能点击了,用户需要再次提交表单的话就要刷新页面之后重新填写数据再提交了。

二:利用session

session中放一个特殊标志。当表单页面被请求时,生成一个特殊的字符标志串,存在session中,同时放在表单的隐藏域里。接受处理表单数据时,检查标识字串是否存在,并立即从session中删除它,然后正常处理数据。

如果发现表单提交里没有有效的标志串,这说明表单已经被提交过了,忽略这次提交。

这使你的web应用有了更高级的XSRF保护

加载提交的页面时候,生成一个随机数,

$code = mt_rand(0,1000000);

存储在表单的隐藏输入框中:

< input type=”hidden” name=”code” value=””>

在接收页面的PHP代码如下:

<?php

session_start();

if(isset($_POST[‘code'])) {

if($_POST[‘code'] == $_SESSION[‘code']){

// 重复提交表单了

}else{

$_SESSION[‘code'] =$_POST[‘code']; //存储code

}

}?>

三:利用cookies

原理和session差不多,但是cookies一旦用户浏览器禁用cookies,这功能就失效了

if(isset($_POST[‘submit'])){

setcookie(“tempcookie”,””,time()+30);

header(“Location:”.$_SERVER[PHP_SELF]);exit();

}

if(isset($_COOKIE[“tempcookie”])){

setcookie(“tempcookie”,””,0);echo “您已经提交过表单”;

}

四:利用header函数跳转

一旦用户点击提交按钮,处理完数据后跳到其他页面

if (isset($_POST[‘submit'])) {

header(‘location:success.php');//处理数据后,转向到其他页面

}

五:利用数据库来添加约束

直接在数据库里添加唯一约束或创建唯一索引,一旦发现用户重复提交了,直接抛出警告或者提示,或者只处理第一次提交的数据,这是最直接有效的方法,要求前期的数据库设计和架构要考虑周全.

六:Post/Redirect/Get模式。

在提交后执行页面重定向,这就是所谓的Post-Redirect-Get (PRG)模式。简言之,当用户提交了表单后,你去执行一个客户端的重定向,转到提交成功信息页面。

if (isset($_POST[‘action']) && $_POST[‘action'] == ‘submitted') {

//处理数据,如插入数据后,立即转向到其他页面

header('location:submits_success.php');

}

总结

以上就是关于PHP解决和避免form表单重复提交的几种方法,通过以上几种方法就能避免用户按F5导致的重复提交,而其也不会出现浏览器表单重复提交的警告,也能消除按浏览器前进和后退按导致的同样问题。希望这篇文章对大家的学习和工作能带来一定的帮助。

PHP 相关文章推荐
cache_lite试用
Feb 14 PHP
ajax在joomla中的原生态应用代码
Jul 19 PHP
php file_get_contents抓取Gzip网页乱码的三种解决方法
Nov 12 PHP
php导出CSV抽象类实例
Sep 24 PHP
两千行代码的PHP学习笔记汇总
Oct 05 PHP
PHP浮点数精度问题汇总
May 13 PHP
php商品对比功能代码分享
Sep 24 PHP
ThinkPHP路由机制简介
Mar 23 PHP
php版微信小店调用api示例代码
Nov 12 PHP
Yii Framework框架使用PHPExcel组件的方法示例
Jul 24 PHP
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
Sep 09 PHP
解决Laravel5.2 Auth认证退出失效的问题
Oct 14 PHP
PHP Callable强制指定回调类型的方法
Aug 30 #PHP
thinkphp配置文件路径的实现方法
Aug 30 #PHP
总结PHP删除字符串最后一个字符的三种方法
Aug 30 #PHP
功能强大的php文件上传类
Aug 29 #PHP
功能强大的PHP发邮件类
Aug 29 #PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
Aug 29 #PHP
Laravel 5.3 学习笔记之 错误&amp;日志
Aug 28 #PHP
You might like
PHP数组循环操作详细介绍 附实例代码
2013/02/03 PHP
php动态生成缩略图并输出显示的方法
2015/04/20 PHP
总结PHP中初始化空数组的最佳方法
2019/02/13 PHP
jQuery 研究心得 取得属性的值
2007/11/30 Javascript
firefox和IE系列的相关区别整理 以备后用
2009/12/28 Javascript
JavaScript NodeTree导航栏(菜单项JSON类型/自制)
2013/02/01 Javascript
关于IE中getElementsByClassName不能用的问题解决方法
2013/08/26 Javascript
让浏览器DOM元素最后加载的js方法
2014/07/29 Javascript
wap图片滚动特效无css3元素纯js脚本编写
2014/08/22 Javascript
jQuery 实现侧边浮动导航菜单效果
2014/12/26 Javascript
javascript 实现 原路返回
2015/01/21 Javascript
Angularjs制作简单的路由功能demo
2015/04/14 Javascript
jQuery实现的漂亮表单效果代码
2015/08/18 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
2016/03/02 Javascript
微信小程序 wxapp内容组件 progress详细介绍
2016/10/31 Javascript
requirejs按需加载angularjs文件实例
2017/06/08 Javascript
javascript计算对象长度的方法
2017/10/25 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
2018/03/06 Javascript
js合并两个数组生成合并后的key:value数组
2018/05/09 Javascript
微信小程序手机号码验证功能的实例代码
2018/08/28 Javascript
微信小程序和H5页面间相互跳转代码实例
2019/09/19 Javascript
解决LayUI加上form.render()下拉框和单选以及复选框不出来的问题
2019/09/27 Javascript
[04:50]2019DOTA2高校联赛秋季赛四强集锦
2019/12/27 DOTA
python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
2014/08/15 Python
python3实现暴力穷举博客园密码
2016/06/19 Python
Python3 SSH远程连接服务器的方法示例
2018/12/29 Python
浅谈Django+Gunicorn+Nginx部署之路
2019/09/11 Python
Python常用模块函数代码汇总解析
2020/08/31 Python
基于html5实现的图片墙效果
2014/10/16 HTML / CSS
英国领先的亚洲旅游专家:Wendy Wu Tours
2018/01/21 全球购物
大学生毕业自我鉴定范文
2014/02/03 职场文书
文化建设工作方案
2014/05/12 职场文书
群众路线教育实践活动自我剖析思想汇报
2014/10/04 职场文书
2014年审计工作总结
2014/11/17 职场文书
2016干部作风整顿心得体会
2016/01/22 职场文书
Tomcat弱口令复现及利用
2022/05/06 Servers