php防止用户重复提交表单

 更新时间:2015年11月02日 08:50:43   投稿:lijiao  
这篇文章主要介绍了解决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="www.jb51.net"> 
 <input type="submit" class="btn" value="提交" /> 
 </form> 
<?php 
} 
?> 

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

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

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

相关文章

  • PHP实现异步调用方法研究与分享

    PHP实现异步调用方法研究与分享

    浏览器和服务器之间只一种面向无连接的HTTP协议进行通讯的,面向无连接的程序的特点是客户端请求服务端,服务端根据请求输出相应的程序,不能保持持久连接
    2011-10-10
  • 让你成为更出色的PHP开发者的10个技巧

    让你成为更出色的PHP开发者的10个技巧

    PHP可能是当下最流行的Web开发语言了。超过2000万的站点使用PHP,并且像Facebook,维基百科等巨型站点,以及全世界最大的开源项目之一的WordPress和Drupal也在使用它。
    2011-02-02
  • php购物车实现方法

    php购物车实现方法

    这篇文章主要介绍了php购物车实现方法,通过4个文件实现购物车的功能,且使用txt文件保存购物车内容,简单实用,需要的朋友可以参考下
    2015-01-01
  • PHP中余数、取余的妙用

    PHP中余数、取余的妙用

    这篇文章主要介绍了PHP中余数、取余的妙用,这个是在WEB开发中一个经常使用的小技巧,不管是在表格、ul、li或者是换行等HTML处理中,需要隔几行换行,隔几行加入ul或li的结束标记等时候,特别的有用,需要的朋友可以参考下
    2015-06-06
  • 基于PHP创建Cookie数组的详解

    基于PHP创建Cookie数组的详解

    本篇文章是对在PHP中创建Cookie数组的方法进行了详细的分析介绍,需要的朋友参考下
    2013-07-07
  • windows下升级PHP到5.3.3的过程及注意事项

    windows下升级PHP到5.3.3的过程及注意事项

    自从让自己专注于LAMP方面以来,就一直在关注PHP社区的动向,今天上了官网php.net,发现发布了新版的了.PHP5.3.3,提高了稳定性和安全性,就有了升级的念头了.
    2010-10-10
  • PHP中Static(静态)关键字功能与用法实例分析

    PHP中Static(静态)关键字功能与用法实例分析

    这篇文章主要介绍了PHP中Static(静态)关键字功能与用法,结合实例形式分析了Static关键字功能、以及静态属性、静态变量等相关使用技巧,需要的朋友可以参考下
    2019-04-04
  • 强烈声明: 不要使用(include/require)_once

    强烈声明: 不要使用(include/require)_once

    本篇文章是对不要使用(include/require)_once的原因进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • PHP 实现代码复用的一个方法 traits新特性

    PHP 实现代码复用的一个方法 traits新特性

    这篇文章主要介绍了PHP 实现代码复用的一个方法,traits的新特性的相关资料,需要的朋友可以参考下
    2015-02-02
  • php使用gzip压缩传输js和css文件的方法

    php使用gzip压缩传输js和css文件的方法

    这篇文章主要介绍了php使用gzip压缩传输js和css文件的方法,实例分析了使用gzip实现压缩js和css文件的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07

最新评论