首页 >后端开发 >php教程 >如何防止 PHP 中的多重表单提交:综合指南

如何防止 PHP 中的多重表单提交:综合指南

Susan Sarandon
Susan Sarandon原创
2024-11-15 05:52:02941浏览

How to Prevent Multiple Form Submissions in PHP: A Comprehensive Guide

防止 PHP 中的多个表单提交:综合指南

多个表单提交可能会成为 Web 应用程序中的问题,从而导致意想不到的后果。本文将提供详细的解决方案,以防止 PHP 中的多次提交。

使用令牌的解决方案

PHP 提供了一个强大的解决方案,使用可以生成并存储在会议。实现方法如下:

  1. 生成令牌:使用 getToken() 函数创建将嵌入到表单中的唯一令牌。
  2. 验证令牌:提交表单时,使用 isTokenValid($token) 函数检查提交的令牌的有效性。如果令牌有效,请将其从有效令牌列表中删除以防止重复使用。
  3. 显示表单:使用 getToken() 获取当前表单的令牌并将其包含为隐藏令牌在表单中输入。

代码示例:

<?php
session_start();

function getToken(){
  $token = sha1(mt_rand());
  $_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) && isTokenValid($postedToken)){
  // Process Form
}

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

重定向和向后兼容性

维护正确的向后和向前导航,建议实现 POST/redirect/GET 模式。这涉及:

  1. 使用令牌发布表单。
  2. 令牌验证成功后,执行所需的操作并将用户重定向到新页面。
  3. 使用对重定向页面进行 GET 请求,防止用户点击“后退”按钮时重新提交表单。

按照以下步骤,可以有效防止多次表单提交,保证表单的完整性您的网络应用程序。

以上是如何防止 PHP 中的多重表单提交:综合指南的详细内容。更多信息请关注PHP中文网其他相关文章!

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