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;
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 在自己本身的页面如何防止重复提交的的主要内容,如果未能解决你的问题,请参考以下文章