php 在自己本身的页面如何防止重复提交的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 在自己本身的页面如何防止重复提交的相关的知识,希望对你有一定的参考价值。

一直在琢磨一个问题 在本页能不能防止重复提交的

一般来说,php最主流的方式,是通过在表单中添加一个隐藏字段,使用类似md5、uniqid这类函数来生成一个随机码进行提交。
验证表单的时候,可以将相应的随机码进行缓存、对比。如果存在已缓存的随机码,就认为该表单已经被提交了,返回错误就可以了。
另外,在用户体验方面,可以在用户点击提交后,将提交按钮disabled几秒钟,就避免了用户误操作提交多次(当然,这只是用户体验层面的,无法阻挡恶意提交)
参考技术A 加session或者 cookie追问

添加了session 和 cookie 然后呢 在本页提交给自己哦 。 呵呵

可以贴出少少的代码给下小灵感吗

追答

if(isset($_SESSION['submit_yet']) && $_SESSION['submit_yet'] >0)
//已经提交了
else
//提交后的操作
 $_SESSION['submit_yet']=1;

参考技术B neng a ............

PHP:通过表单确认页面防止返回/重复提交。我的工作流程正确吗?

【中文标题】PHP:通过表单确认页面防止返回/重复提交。我的工作流程正确吗?【英文标题】:PHP: Prevent back/double submission with a form confirmation page. Is my workflow correct? 【发布时间】:2012-03-14 07:31:21 【问题描述】:

我无法让它工作。我试图阻止用户返回表单确认页面,该页面在最终提交之前显示他的信息。

这是当前的工作流程:

post.php //User enters info; name, date, etc
->clicks submit
verify.php //This page displays the information the user entered before final submission.
           //No database work done
->clicks final submit
verify_f.php //Inserts data into database, REDIRECTS to verify_redirect.php
verify_redirect.php //Redirects to next page, confirm.php
confirm.php //Final screen. Lets user know that his data was successfully entered

问题是在confirm.php,用户可以点击他的返回按钮,然后在verify_f.php,确认页面,他输入的所有数据都会显示在这里,他所要做的就是点击最终提交按钮再次重复输入。

如何解决这个问题?

【问题讨论】:

双重重定向有什么意义,顺便说一句?无法verify_f.php直接重定向到confirm.php? 【参考方案1】:

您可以在这些表单之间生成随机散列,并在提交表单后更改散列。每次用户提交表单时,您都会检查来自表单的哈希值以及通过 $_SESSION 存储在服务器中的任何内容。

【讨论】:

【参考方案2】:

verify.php 中,生成一个随机数(随机散列通常适用于这种简单的目的)并将其添加为提交给verify_f.php 的隐藏表单字段。然后在verify_f.php 中检查一下这个nonce 之前没有被使用过。

【讨论】:

【参考方案3】:

将所有处理保留在同一个脚本中。 您可以使用一些表单字段和条件运算符来控制程序流程,即:

if (isset($_POST['confitm'])) 
  include 'confirm.php';

【讨论】:

以上是关于php 在自己本身的页面如何防止重复提交的的主要内容,如果未能解决你的问题,请参考以下文章

如何防止用户重复提交数据

PHP 怎么防止GET方式提交重复数据?

如何使用 PHP 会话来防止重复提交表单?

php如何避免刷新页面重复提交

重定向到同一页面php后避免表单重新提交[重复]

.net mvc如何防止用户后退,现在保存订单后能回到订单页面重复提交,如何能防止后退