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

效果图:

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

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

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

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

第四,就是做session令牌验证。

我们现在来了解下简单的利用session token来防止表单重复提交的方法。

我们在表单中加一个input隐藏域,即type="hidden",其value值用来保存token值,当页面刷新的时候这个token值会变化,提交后判断token值是否正确,如果前台提交的token与后台不匹配,则认为是重复提交。

/*

* 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{

?>

}

?>

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

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

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

php防止订单重复计算,php防止用户重复提交表单相关推荐

  1. 如何防止用户重复提交表单

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

  2. 防止刷新或后退页面重复提交表单

    刷新或后退页面会引起重复提交表单,为了避免这个头疼的问题发生,有几种方法可以实现.网上已经有很多实现的方式的思路,比如提交后禁用按钮.重定向和令牌,但前两种方式有时候不起作用或者说没有"安全 ...

  3. php js 防止重复提交表单,php如何防止form重复提交

    php如何防止form重复提交 引入cookie机制来解决(推荐学习:PHP编程从入门到精通) 用户提交表单到后端,在 Cookie 中做标记,指定时间内重复提交无效.但是用户禁用 Cookie 这个 ...

  4. php ajax 重复提交,ThinkPHP防止重复提交表单的方法实例分析

    本文实例总结分析了ThinkPHP防止重复提交表单的方法.分享给大家供大家参考,具体如下: 为什么会有表单重复的坑 在开发中,如果一个新增或修改的表单,在后台完成数据库操作后我们设定的不是跳转到其他页 ...

  5. java mvc中重复提交表单,spring mvc 防止重复提交表单的两种方法,推荐第二种

    第一种方法:判断session中保存的token 比较麻烦,每次在提交表单时都必须传入上次的token.而且当一个页面使用ajax时,多个表单提交就会有问题. 注解Token代码: package c ...

  6. java客户端重复请求_Java后台防止客户端重复请求、提交表单实现原理

    Java后台防止客户端重复请求.提交表单实现原理 发布于 2021-1-8| 复制链接 摘记: 这篇文章主要介绍了Java后台防止客户端重复请求.提交表单实现原理,文中通过示例代码介绍的非常详细,对大 ...

  7. PHP自学3——在html的table标签中显示用户提交表单

    为了更好地显示用户提交表单,本节将在上一节的基础上将读取的用户表单显示在html的<table>标签中,这一节将用到和数组有关的知识. 本节代码将从外部文件(.txt文件)中读取信息于指定 ...

  8. JavaWeb -- Struts1 使用示例: 表单校验 防表单重复提交 表单数据封装到实体

    1. struts 工作流程图 超链接 2. 入门案例 struts入门案例:1.写一个注册页面,把请求交给 struts处理<form action="${pageContext.r ...

  9. php如何防止重复提交表单,如何防止php重复提交表单方法

    解读:Token一般用在两个地方--防止表单重复提交.anti csrf攻击(跨站点请求伪造). Token,就是令牌,最大的特点就是随机性,不可预测.两者在原理上都是通过session token来 ...

最新文章

  1. 计算机专业的个人实习报告范文,大学计算机专业的个人实习报告范文
  2. 一次向svn中增加所有新增文件 svn add all new files【转】
  3. 跟踪异常–第5部分–使用Spring进行计划
  4. MATLAB xlswrite函数出现“错误: 服务器出现意外情况”
  5. 作者:洪学海(1967-),男,博士,中国科学院计算技术研究所研究员,信息技术战略研究中心常务副主任。...
  6. STL源码学习之空间配置
  7. python创建实例属性_Python学习笔记__6.5章 实例属性和类属性
  8. 程序阅读理解题目(高中语文版,附答案)
  9. Python_Python处理JSON文件
  10. mysql 多表并列查询_Mysql多表查询(两张独立表,一张关系表)
  11. flashlite3无法接入网络的解决办法
  12. 【BZOJ4149】[AMPPZ2014]Global Warming 单调栈+RMQ+二分
  13. 使用SDE的一点体会
  14. centos7安装(二进制包)mysql8
  15. 交换机/路由器实验:保姆级别的iperf安装和使用教程
  16. 25.人脸关键点检测
  17. 二元隐函数求二阶偏导_多元函数隐函数微分 二阶偏导的求法
  18. 博科Brocade系列光纤交换机报价 程鹏宇 13829750520
  19. Django Rest_framework 1(RESTRESTful)
  20. Linux学习笔记(3)- 网络编程以及范例程序

热门文章

  1. 硬核,这个充电宝居然烧煤气!
  2. 英雄会被表彰,这些技术与代码也将被历史铭记
  3. 基于VHDL的RISC microprocessor设计
  4. java输入流读取几行文本_Java基础笔记Day_16
  5. c 语言注释格式化,linux 格式化C语言的源文件 命令:indent
  6. yjk只算弹性的不计算弹塑性_材料本构弹塑性力学知识二
  7. ( )不是html的布局标签,不要使用的HTML标签(WEB标准网页布局)
  8. animation停留_这些Animation动画技巧与细节你知道么
  9. Oracle日期转换为周,月,季度,半年,年
  10. 关于下拉菜单和iframe的问题