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 相关文章推荐
不要轻信 PHP_SELF的安全问题
Sep 05 PHP
xml在joomla表单中的应用详解分享
Jul 19 PHP
php多功能图片处理类分享(php图片缩放类)
Mar 14 PHP
php把数据表导出为Excel表的最简单、最快的方法(不用插件)
May 10 PHP
如何使用php脚本给html中引用的js和css路径打上版本号
Nov 18 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
Jan 19 PHP
最新最全PHP生成制作验证码代码详解(推荐)
Jun 12 PHP
浅谈php中fopen不能创建中文文件名文件的问题
Feb 06 PHP
PHP后台微信支付和支付宝支付开发
Apr 28 PHP
Laravel实现短信注册的示例代码
May 29 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
Dec 20 PHP
PHP使用Redis队列执行定时任务实例讲解
Mar 24 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中将数组转成XML格式的实现代码
2011/08/08 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
2013/06/24 PHP
ThinkPHP中Session用法详解
2014/11/29 PHP
PHP日期和时间函数的使用示例详解
2020/08/06 PHP
JavaScript window.setTimeout() 的详细用法
2009/11/04 Javascript
基于jquery的滚动新闻列表
2010/06/19 Javascript
JQuery获取或设置ckeditor的数据(示例代码)
2013/11/15 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
jquery右下角自动弹出可关闭的广告层
2015/05/08 Javascript
Javascript基础学习笔记(菜鸟必看篇)
2016/07/22 Javascript
Bootstrap CDN和本地化环境搭建
2016/10/26 Javascript
微信小程序 自己制作小组件实例详解
2016/12/22 Javascript
快速使用node.js进行web开发详解
2017/04/26 Javascript
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
2019/02/27 jQuery
JS+CSS3实现的简易钟表效果示例
2019/04/13 Javascript
微信小程序结合Storage实现搜索历史效果
2019/05/18 Javascript
Vue将页面导出为图片或者PDF
2020/08/17 Javascript
微信小程序如何自定义table组件
2019/06/29 Javascript
Node.js API详解之 net模块实例分析
2020/05/18 Javascript
[49:59]KG vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python实现udp数据报传输的方法
2014/09/26 Python
Python 多进程和数据传递的理解
2017/10/09 Python
Pycharm 操作Django Model的简单运用方法
2018/05/23 Python
python实现俄罗斯方块
2018/06/26 Python
Python开发最牛逼的IDE——pycharm
2018/08/01 Python
python 定时器,轮询定时器的实例
2019/02/20 Python
英国受欢迎的运动鞋和街头服装商店:Footasylum
2018/06/12 全球购物
测量工程专业求职信
2014/02/24 职场文书
2014年学生会主席工作总结
2014/11/07 职场文书
财务工作个人总结
2015/02/27 职场文书
总账会计岗位职责
2015/04/02 职场文书
2015年重阳节主持词
2015/07/04 职场文书
java基础——多线程
2021/07/03 Java/Android
MySQL基于索引的压力测试的实现
2021/11/07 MySQL
十大冰系宝可梦排名,颜值最高的阿罗拉九尾,第三使用率第一
2022/03/18 日漫
Python通用验证码识别OCR库ddddocr的安装使用教程
2022/07/07 Python