PHP使用Session防止表单重复提交
分类:程序设计日期:2015-12-27 - 1:44:50评论:1条作者:老谢
最近一段时间实在太忙,很多东西想发到博客一直抽不出时间好好的写出来,比如新换的罗技MX ANYWHERE2的使用体验以及电动牙刷的使用体验还有健身几个月的成果等等等,趁着工作刚结束把刚刚解决掉的表单重复提交的问题的处理方法贴出来,以便共同学习进步:)
问题背景是用户在网络不好等异常情况下,反复点击submit提交表单,导致同一表单被重复提交写入到数据库,经过一番搜索,本来打算使用JS实现点击submit后,将submit按钮设置为不可用,但是实现过程中遇到很多问题,无奈JS一点都不懂,于是便使用更好的Session的方式来解决这个问题。
使用Session解决的原理是:Session保存在服务器端,在PHP运行过程中可以改变Session变量,下次访问这个变量时,得到的是新赋的值,所以,可以用一个Session变量记录表单提交的值,如果不匹配,则认为是用户在重复提交。
from.php
<?php session_start(); //根据当前SESSION生成随机数 $code = mt_rand(0,1000000); $_SESSION['code'] = $code; //将此随机数暂存入到session ?> <form id="form1" name="form1" method="post" action="action.php"> <p>说明 <input type="text" name="titile" /> <input type="hidden" name="originator" value="<?=$code;?>"></p> <p><input type="submit" name="Submit" value="提交" /></p> </form> |
使用mt_rand函数生成一个随机值给变量code,把变量code的值复给$_SESSION[‘code’],提交后比对两个值是否一致即可。
action.php
<?php session_start(); if(isset($_POST['originator'])) { if($_POST['originator'] == $_SESSION['code']){ echo "ok"; unset($_SESSION["code"]); //将其清除掉此时再按F5则无效 }else{ echo "请不要刷新本页面或重复提交表单"; } }?> |
特别注意:必须要使用unset($_SESSION[“code”]);销毁$_SESSION[“code”]!
本文参考(感谢以下两篇文章的原作者):
最新评论
老何:不至于跌得这么狠吧
Andy烧麦:这些大厂都能提供必要的售后
王光卫博客:小米生态还是比较丰富
空空裤兜:在天猫买的利维斯顿,阿里智能APP...
林羽凡:我突然发现,你也记录了很多博文了。
菊座:小米的东西还行
zwwooooo:一般电器产品都jd,就是想售后身心
zwwooooo:能随便搞个公司玩玩也算是实力选手
大D:坚持就是胜利哈哈哈
老麦:看着那一排日志存档,老前辈了啊。