使用 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中文网其他相关文章!