php怎么解决和避免表形式单重复提交

  介绍

这篇文章主要介绍”php怎么解决和避免表形式单重复提交”,在日常操作中,相信很多人在php怎么解决和避免表形式单重复提交问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答“php怎么解决和避免表形式单重复提交”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

<强>前言

为什么要避免表形式单被重复提交呢?因为我们不想让我们的服务器重复处理没必要的数据,同时我们也是避免我们的数据库产生重复的数据,避免表单重复提交也是让我们的网站更安全的一种表现。

先看一下有哪些情况下回导致表单重复提交呢,知道哪些情况下可能会出现表单重复提交就可以从根源处理表单重复提交的情况了。

<强>下面的情况就会导致表单重复提交:

,,,,,点击提交按钮两次。

,,,,,点击刷新按钮。

,,,,,使用浏览器后退按钮重复之前的操作,导致重复提交表单。

,,,,,使用浏览器历史记录重复提交表单。

,,,,,浏览器重复的HTTP请求。

,,,,,网页被恶意刷新。

<强>下面是几种解决办法:

<强>一:利用js设置按钮点击后变成灰色

& lt; form  name=form1 方法=癙OST”, action="/",目标=_blank>      & lt; p>      & lt; input 类型=拔谋尽?name=" T1,大??0”比;      & lt; input 类型=鞍磁ァ?value="提交”,onclick=" javascript: {this.disabled=true; document.form1.submit();}”在      & lt;/p>      & lt;/form>

点击完按钮之后变成灰色就不能点击了,用户需要再次提交表单的话就要刷新页面之后重新填写数据再提交了。

<强>二:利用会话

<代码>会话中放一个特殊标志。当表单页面被请求时,生成一个特殊的字符标志串,存在<代码> 中,同时放在表单的隐藏域里。接受处理表单数据时,检查标识字串是否存在,并立即从会话中删除它,然后正常处理数据。

如果发现表单提交里没有有效的标志串,这说明表单已经被提交过了,忽略这次提交。

这使你的网页应用有了更高级的<代码> XSRF 保护

加载提交的页面时候,生成一个随机数,

<代码> $代码=mt_rand(0, 1000000);

存储在表单的隐藏输入框中:

<代码> & lt;输入类型=耙亍钡拿?按搿県ttps://www.yisu.com/zixun/value=" ">

在接收页面PHP的代码如下:

& lt; PHP ?      session_start ();      如果(收取($ _POST['代码# 39;])),{      if ($ _POST['代码# 39;],==,$ _SESSION['代码# 39;]){//,重复提交表单了      其他}{      $ _SESSION['代码# 39;],=$ _POST['代码# 39;];,//存储的代码      }      }?在

<强>三:利用饼干

原理和会话<代码> 差不多,但是<代码>饼干一旦用户浏览器禁用<代码>饼干> 如果收取($ _POST['提交# 39;])){      setcookie (“tempcookie”、”“、时间()+ 30);      头(地点:”。$ _SERVER [PHP_SELF]);退出();      }      如果收取($ _COOKIE [" tempcookie "])) {      setcookie (“tempcookie”、“0); echo “您已经提交过表单”;      }

<强>四:利用头函数跳转

一旦用户点击提交按钮,处理完数据后跳到其他页面

if (收取($ _POST['提交# 39;])),{      标题(“位置:success.php& # 39;);//处理数据后,转向到其他页面      }

<强>五:利用数据库来添加约束

直接在数据库里添加唯一约束或创建唯一索引,一旦发现用户重复提交了,直接抛出警告或者提示,或者只处理第一次提交的数据,这是最直接有效的方法,要求前期的数据库设计和架构要考虑周全。

<>强六:Post/重定向/Get模式。

在提交后执行页面重定向,这就是所谓的<代码> Post-Redirect-Get (PRG) 模式。简言之,当用户提交了表单后,你去执行一个客户端的重定向,转到提交成功信息页面。

if (收取($ _POST['行动# 39;]),,,,$ _POST['行动# 39;],==,“提交# 39;),{//处理数据,如插入数据后,立即转向到其他页面      头(& # 39;地点:submits_success.php& # 39;);      }

到此,关于“php怎么解决和避免表形式单重复提交”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

php怎么解决和避免表形式单重复提交