首页 >后端开发 >php教程 >如何使用 PHP 防止多次表单提交?

如何使用 PHP 防止多次表单提交?

Barbara Streisand
Barbara Streisand原创
2024-11-09 14:26:02664浏览

How to Prevent Multiple Form Submissions with PHP?

使用 PHP 防止多次表单提交

在 Web 开发中,当用户重复单击提交时,必须防止多次表单提交按钮。这可能会导致意外的结果,例如重复的数据条目或意外的行为。 PHP 提供了多种技术来防止此问题。

一种有效的方法是利用独特的表单标记。当显示表单时,会生成一个唯一的令牌并将其存储在会话中。提交表单后,将根据存储的版本检查令牌。如果标记匹配,则处理表单提交。如果不这样做,提交将被拒绝,从而防止多次提交。

这是一个简单的 PHP 实现:

session_start();

function getToken() {
  $token = sha1(mt_rand());
  if (!isset($_SESSION['tokens'])) {
    $_SESSION['tokens'] = array($token => 1);
  } else {
    $_SESSION['tokens'][$token] = 1;
  }
  return $token;
}

function isTokenValid($token) {
  if (!empty($_SESSION['tokens'][$token])) {
    unset($_SESSION['tokens'][$token]);
    return true;
  }
  return false;
}

$postedToken = filter_input(INPUT_POST, 'token');
if (!empty($postedToken)) {
  if (isTokenValid($postedToken)) {
    // Process form
  } else {
    // Handle error
  }
}

$token = getToken();
<form method="post">
  <fieldset>
    <input type="hidden" name="token" value="<?php echo $token; ?>" />
    <!-- Add form content -->
  </fieldset>
</form>

要增强安全性,请将此令牌验证与重定向结合起来关于表单提交。这确保当用户按下后退按钮时,会显示带有新令牌的新表单。这种模式称为 POST / 重定向 / GET,进一步防止多次提交并保持向后和向前兼容性。

以上是如何使用 PHP 防止多次表单提交?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn