PHP+Session防止表单重复提交的解决方法


Posted in PHP onApril 09, 2018

 index.php

当前表单页面is_submit设为0

SESSION_START(); 
$_SESSION['is_submit'] = 0;
<form id="reg" action="post.php" method="post"> 
  <p>用户名:<input type="text" class="input" name="username" id="user"></p> 
  <p>密   码:<input type="password" class="input" name="password" id="pass"></p> 
  <p>E-mail:<input type="text" class="input" name="email" id="email"></p> 
  <p><input type="submit" name="submit" class="btn" value="提交注册"/></p> 
</form>

 post.php

若是提交表单了,设当前'is_submit为1,若是刷新post.php,那么将执行else代码

SESSION_START(); 
if (isset($_POST['submit'])) { 
  if ($_SESSION['is_submit'] == '0') { 
    $_SESSION['is_submit'] = '1'; 
    echo "代码块,要做的事,代码...<a onclick='history.go(-1);' href='javascript:void(0)'>返回</a>"; 
  } else { 
    echo "请不用重复提交<a href='index.php'>PHP+SESSION防止表单重复提交</a>"; 
  } 
}

 php 解决表单重复提交实现方法介绍

[导读] 重复提交是我们开发中会常碰到的一个问题,除了我们使用js来防止表单的重复提交,同时还可以使用php来防止重复提交哦。

例1 代码如下

重复提交是我们开发中会常碰到的一个问题,除了我们使用js来防止表单的重复提交,同时还可以使用php来防止重复提交哦。

例1

 代码如下

<?php
 /*
 * php中如何防止表单的重复提交
 */
session_start();
 if (empty($_SESSION['ip'])) {//第一次写入操作,判断是否记录了IP地址,以此知道是否要写入数据库
  $_SESSION['ip'] = $_SERVER['REMOTE_ADDR']; //第一次写入,为后面刷新或后退的判断做个铺垫
  //...........//写入数据库操作
} else {//已经有第一次写入后的操作,也就不再写入数据库
  echo '请不要再次刷新和后退'; //写一些已经写入的提示或其它东西
}
 ?>

具体原理

session范围变量token来防止。

1. 开启session:

session_start();

2. 如果有表单提交

 代码如下 复制代码

if (isset($token))

token以hidden的形式包含在form当中。

 代码如下 复制代码

<input type="hidden" name="token" value="<?php echo $token; ?>" />

 3. 如果是重复提交表单

 代码如下

if ($_SESSION["token"] != $token) { 
  // 不让重复提交,在此处理 
  // header("location:".$_SERVER['PHP_SELF']); 
 } else { 
  // 正常的表单提交,在此处理 
  // echo "已提交";  
}

4. 设置token值

 代码如下

$token = mt_rand(0,1000000);
$_SESSION['token'] = $token;

总结

以上所述是小编给大家介绍的PHP+Session防止表单重复提交的解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
攻克CakePHP系列一 连接MySQL数据库
Oct 22 PHP
PHP 获取远程文件内容的函数代码
Mar 24 PHP
php中判断数组是一维,二维,还是多维的解决方法
May 04 PHP
md5 16位二进制与32位字符串相互转换示例
Dec 30 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
Jul 28 PHP
PHP实现AES256加密算法实例
Sep 22 PHP
PHP中的替代语法介绍
Jan 09 PHP
Smarty模板变量调节器用法分析
May 23 PHP
yii2利用自带UploadedFile实现上传图片的示例
Feb 16 PHP
ThinkPHP实现分页功能
Apr 28 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
Aug 31 PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
Jun 06 PHP
PHP创建自己的Composer包方法
Apr 09 #PHP
Bootstrap+PHP实现多图上传功能实例详解
Apr 08 #PHP
PHP实现的获取文件mimes类型工具类示例
Apr 08 #PHP
PHP面向对象之里氏替换原则简单示例
Apr 08 #PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
Apr 08 #PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
Apr 08 #PHP
PHP实现微信红包金额拆分试玩的算法示例
Apr 07 #PHP
You might like
PHP加密解密实例分析
2015/12/25 PHP
php自动提交表单的方法(基于fsockopen与curl)
2016/05/09 PHP
thinkphp3.x中session方法的用法分析
2016/05/20 PHP
PHP常用操作类之通信数据封装类的实现
2017/07/16 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
PHP DB 数据库连接类定义与用法示例
2019/03/11 PHP
Domino中运用jQuery读取视图内容的方法
2009/10/21 Javascript
JavaScript 面向对象的 私有成员和公开成员
2010/05/13 Javascript
解决用jquery load加载页面到div时,不执行页面js的问题
2014/02/22 Javascript
JavaScript数组前面插入元素的方法
2015/04/06 Javascript
在javascript中随机数 math random如何生成指定范围数值的随机数
2015/10/21 Javascript
require简单实现单页应用程序(SPA)
2016/07/12 Javascript
微信小程序(应用号)简单实例应用及实例详解
2016/09/26 Javascript
微信小程序开发之实现自定义Toast弹框
2017/06/08 Javascript
JavaScript fetch接口案例解析
2018/08/30 Javascript
浅谈让你的代码更简短,更整洁,更易读的ES6小技巧
2018/10/25 Javascript
Async/Await替代Promise的6个理由
2019/06/15 Javascript
axios如何利用promise无痛刷新token的实现方法
2019/08/27 Javascript
vue-cli3 取消eslint校验代码的解决办法
2020/01/16 Javascript
Vue组件基础用法详解
2020/02/05 Javascript
vue实现从外部修改组件内部的变量的值
2020/07/30 Javascript
JS如何实现在弹出窗口中加载页面
2020/12/03 Javascript
树莓派中python获取GY-85九轴模块信息示例
2013/12/05 Python
5种Python单例模式的实现方式
2016/01/14 Python
Python线程池模块ThreadPoolExecutor用法分析
2018/12/28 Python
Python进阶:生成器 懒人版本的迭代器详解
2019/06/29 Python
Python迭代器iterator生成器generator使用解析
2019/10/24 Python
浅谈Python中的字符串
2020/06/10 Python
Python从文件中读取数据的方法步骤
2020/11/18 Python
HTML5 直播疯狂点赞动画实现代码 附源码
2020/04/14 HTML / CSS
北美Newegg打造的全球尖货海购平台:tt海购
2018/09/28 全球购物
美国在线购物频道:Shop LC
2019/04/21 全球购物
英国珠宝和手表专家:Pleasance & Harper
2020/10/21 全球购物
领导干部学习“三严三实”思想汇报
2014/09/15 职场文书
党建工作目标管理责任书
2015/01/29 职场文书
总结Python变量的相关知识
2021/06/28 Python