PHP:通过表单确认页面防止反向/双重提交.我的工作流程正确吗


PHP: Prevent back/double submission with a form confirmation page. Is my workflow correct?

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

这是当前的工作流程:

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,即确认页面上,显示他输入的所有数据,他所要做的就是再次点击最终提交按钮进行双重输入。

这怎么能解决?

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

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

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

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