php防止用户重复提交表单


Posted in PHP onNovember 02, 2015

我们提交表单的时候,不能忽视的一个限制是防止用户重复提交表单,因为有可能用户连续点击了提交按钮或者是攻击者恶意提交数据,那么我们在提交数据后的处理如修改或添加数据到数据库时就会惹上麻烦。

效果图:

php防止用户重复提交表单

php防止用户重复提交表单 

那么如何规避这中重复提交表单的现象出现呢?我们可以从很多方面入手:

首先从前端做限制。前端JavaScript在按钮被点击一次后禁用,即disabled,这个方法简单的防止了多次点击提交按钮,但是缺点是如果用户禁用了javascript脚本则失效。

第二,我们可以在提交后做redirect页面重定向,即提交后跳转到新的页面,主要避免F5重复提交,但是也有不足之处。

第三,就是数据库做唯一索引约束

第四,就是做session令牌验证
我们现在来了解下简单的利用session token来防止表单重复提交的方法。
我们在表单中加一个input隐藏域,即type="hidden",其value值用来保存token值,当页面刷新的时候这个token值会变化,提交后判断token值是否正确,如果前台提交的token与后台不匹配,则认为是重复提交。

<?php 
/* 
* PHP简单利用token防止表单重复提交 
*/ 
session_start(); 
header("Content-Type: text/html;charset=utf-8"); 
function set_token() { 
 $_SESSION['token'] = md5(microtime(true)); 
} 
 
function valid_token() { 
 $return = $_REQUEST['token'] === $_SESSION['token'] ? true : false; 
 set_token(); 
 return $return; 
} 
 
//如果token为空则生成一个token 
if(!isset($_SESSION['token']) || $_SESSION['token']=='') { 
 set_token(); 
} 
 
if(isset($_POST['web'])){ 
 if(!valid_token()){ 
 echo "token error,请不要重复提交!"; 
 }else{ 
 echo '成功提交,Value:'.$_POST['web']; 
 } 
}else{ 
?> 
 <form method="post" action=""> 
 <input type="hidden" name="token" value="<?php echo $_SESSION['token']?>"> 
 <input type="text" class="input" name="web" value="3water.com"> 
 <input type="submit" class="btn" value="提交" /> 
 </form> 
<?php 
} 
?>

以上是一个简单的防止重复提交表单的例子。

那么实际项目开发中,会对表单token做更复杂的处理,即我们说的令牌验证。可能要做的处理有:验证来源域,即来路,是否为外部提交;匹配要执行的动作,是添加、修改or删除;其次最重要的是构建token,token可以采用可逆的加密算法,尽可能复杂,因为明文还是不安全的。

以上就是为大家分享的如何解决ph防止用户重复提交表单问题,希望对大家的学习有所帮助。

PHP 相关文章推荐
用PHP调用数据库的存贮过程!
Oct 09 PHP
PHP 常见郁闷问题答解
Nov 25 PHP
php中的一个中文字符串截取函数
Feb 14 PHP
php中比较简单的导入phpmyadmin生成的sql文件的方法
Jun 28 PHP
php报表之jpgraph柱状图实例代码
Aug 22 PHP
PHP自带函数给数字或字符串自动补齐位数
Jul 29 PHP
php文件上传简单实现方法
Jan 24 PHP
深入解析PHP中foreach语句控制数组循环的用法
Nov 30 PHP
PHP使用strstr()函数获取指定字符串后所有字符的方法
Jan 07 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
Mar 29 PHP
浅析Yii2 gridview实现批量删除教程
Apr 22 PHP
WordPress中设置Post Type自定义文章类型的实例教程
May 10 PHP
windows8.1下Apache+Php+MySQL配置步骤
Oct 30 #PHP
php验证邮箱和ip地址最简单方法汇总
Oct 30 #PHP
php三种实现多线程类似的方法
Oct 30 #PHP
php搜索文件程序分享
Oct 30 #PHP
纯php生成随机密码
Oct 30 #PHP
php利用smtp类实现电子邮件发送
Oct 30 #PHP
PHP利用APC模块实现大文件上传进度条的方法
Oct 29 #PHP
You might like
php中变量及部分适用方法
2008/03/27 PHP
PHP array_multisort() 函数的深入解析
2013/06/20 PHP
php解决安全问题的方法实例
2019/09/19 PHP
JavaScript入门教程 Cookies
2009/01/31 Javascript
Ext.MessageBox工具类简介
2009/12/10 Javascript
ASP.NET jQuery 实例16 通过控件CustomValidator验证RadioButtonList
2012/02/03 Javascript
extjs中form与grid交互数据(record)的方法
2013/08/29 Javascript
JQuery操作单选按钮以及复选按钮示例
2013/09/23 Javascript
jquery判断浏览器后退时候弹出消息的方法
2014/08/11 Javascript
js钢琴按钮波浪式图片排列效果代码分享
2015/08/26 Javascript
全面解析JavaScript中“&amp;&amp;”和“||”操作符(总结篇)
2016/07/18 Javascript
JS正则截取两个字符串之间及字符串前后内容的方法
2017/01/06 Javascript
Vue2.0 axios前后端登陆拦截器(实例讲解)
2017/10/27 Javascript
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
2018/10/17 NodeJs
基于Webpack4和React hooks搭建项目的方法
2019/02/05 Javascript
react中使用css的7中方式(最全总结)
2019/02/11 Javascript
React中Ref 的使用方法详解
2020/04/28 Javascript
vue+element获取el-table某行的下标,根据下标操作数组对象方式
2020/08/07 Javascript
js实现随机点名功能
2020/12/23 Javascript
pandas.cut具体使用总结
2019/06/24 Python
在OpenCV里实现条码区域识别的方法示例
2019/12/04 Python
python实现双色球随机选号
2020/01/01 Python
pycharm安装及如何导入numpy
2020/04/03 Python
一款基于css3的列表toggle特效实例教程
2015/01/04 HTML / CSS
详解如何解决canvas图片getImageData,toDataURL跨域问题
2018/09/17 HTML / CSS
STAY JAPAN台湾:预订日本民宿
2018/07/22 全球购物
css animation配合SVG制作能量流动效果
2021/03/24 HTML / CSS
写好自荐信要注意的问题
2013/11/10 职场文书
平安建设实施方案
2014/03/19 职场文书
教师党员公开承诺事项
2014/05/28 职场文书
消防工作实施方案
2014/06/09 职场文书
中层领导干部群众路线对照检查材料思想汇报
2014/10/02 职场文书
欢迎家长标语
2014/10/08 职场文书
党员民主评议自我评价
2014/10/20 职场文书
人事聘任通知
2015/04/21 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书