php防止表单重复提交实例讲解


Posted in PHP onFebruary 11, 2019

说来惭愧,前几天做项目的时候,出现个低级错误。在公司后台做表单提交,一是自己员工用,二是 html 自己来写的,没有验证表单重复提交,结果出错了。写出来记录下以便提醒自己,时刻不能疏忽。

解决方法

其实方法有很多种,只举例几个简单的来说说。

框架

很多框架都有防止重复提交的功能,大家应该都有了解,这里不再赘述。

前端

原理很简单,用户点击提交之后,使用 JS 将提交按钮置灰即可。

后端

也就是使用 PHP 进行验证,当然不局限以下几种

Cookie

用户提交表单到后端,在 Cookie 中做标记,指定时间内重复提交无效。但是用户禁用 Cookie 这个方法就失效了。

<?php
 
if (isset($_COOKIE['formFlag'])) {
  exit('error');
}
 
// 处理数据
 
// 30秒内重复提交无效
setcookie('formFlag', time(), time() + 30);

Session

展示表单页面的时候,生成随机数,同时存储在 Session 中以及表单隐藏域中。第一次提交的时候,对比成功删除 Session 中的值。

<?php
 
if (!isset($_SESSION['formFlag']) || $_POST['formFlag'] != $_SESSION['formFlag']) {
  exit('error');
}
 
// 处理数据
 
unset($_SESSION['formFlag']);

上面就是本次介绍PHP防止重复提交表单的全部内容,感谢大家对三水点靠木的支持。

PHP 相关文章推荐
配置php网页显示各种语法错误
Sep 23 PHP
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
Apr 08 PHP
ThinkPHP的L方法使用简介
Jun 18 PHP
php使用PDO方法详解
Dec 27 PHP
深入理解PHP中的Streams工具
Jul 03 PHP
编写PHP脚本过滤用户上传的图片
Jul 03 PHP
php生成固定长度纯数字编码的方法
Jul 09 PHP
四个PHP非常实用的功能
Sep 29 PHP
如何正确配置Nginx + PHP
Jul 15 PHP
浅谈php(codeigniter)安全性注意事项
Apr 06 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
Jun 06 PHP
PHP字符串与数组处理函数用法小结
Jan 07 PHP
stripos函数知识点实例分享
Feb 11 #PHP
PHP检查URL包含特定字符串实例方法
Feb 11 #PHP
PHP strripos函数用法总结
Feb 11 #PHP
PHP xpath()函数讲解
Feb 11 #PHP
Laravel框架实现超简单的分页效果示例
Feb 08 #PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
Feb 08 #PHP
Yii框架引入coreseek分页功能示例
Feb 08 #PHP
You might like
星际争霸任务指南——神族
2020/03/04 星际争霸
php漏洞之跨网站请求伪造与防止伪造方法
2013/08/15 PHP
php json_encode()函数返回json数据实例代码
2014/10/10 PHP
PHP实现简单汉字验证码
2015/07/28 PHP
golang 调用 php7详解及实例
2017/01/04 PHP
基于PHP常用文件函数和目录函数整理
2017/08/17 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
学习YUI.Ext 第四天--对话框Dialog的使用
2007/03/10 Javascript
jQuery 页面载入进度条实现代码
2009/02/08 Javascript
ie 调试javascript的工具
2009/04/29 Javascript
toString()一个会自动调用的方法
2010/02/08 Javascript
基于JavaScript 声明全局变量的三种方式详解
2013/05/07 Javascript
Js实现双击鼠标自动滚动屏幕的示例代码
2013/12/14 Javascript
使用jquery组件qrcode生成二维码及应用指南
2015/02/22 Javascript
JavaScript检测上传文件大小的方法
2015/07/22 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
Restify中接入Socket.io报Error:Can’t set headers的错误解决
2017/03/28 Javascript
详解vue-cli 接口代理配置
2017/12/13 Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
2018/06/12 Javascript
js中Array对象的常用遍历方法详解
2019/01/17 Javascript
记录vue项目中遇到的一点小问题
2019/05/14 Javascript
Vue实现固定定位图标滑动隐藏效果
2019/05/30 Javascript
Element Popover 弹出框的使用示例
2020/07/26 Javascript
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
2020/12/02 Vue.js
Python的Django框架中使用SQLAlchemy操作数据库的教程
2016/06/02 Python
Python 编码规范(Google Python Style Guide)
2018/05/05 Python
python语音识别实践之百度语音API
2018/08/30 Python
Python中如何使用if语句处理列表实例代码
2019/02/24 Python
对django后台admin下拉框进行过滤的实例
2019/07/26 Python
python mqtt 客户端的实现代码实例
2019/09/25 Python
将python字符串转化成长表达式的函数eval实例
2020/05/11 Python
html5+css3之动画在webapp中的应用
2014/11/21 HTML / CSS
基于IE10/HTML5 开发
2013/04/22 HTML / CSS
《欢乐的泼水节》教学反思
2014/04/22 职场文书
海上钢琴师的观后感
2015/06/11 职场文书
2016医师资格考试考生诚信考试承诺书
2016/03/25 职场文书