首页 > 后端开发 > php教程 > 如何防止 Web 应用程序中意外重新提交表单?

如何防止 Web 应用程序中意外重新提交表单?

Susan Sarandon
发布: 2024-11-13 00:43:02
原创
554 人浏览过

How Can I Prevent Unintended Form Resubmission in Web Applications?

防止意外的表单重新提交

由于页面刷新而重新提交表单是 Web 应用程序中常见的烦恼。为了有效地处理这个问题,采用以下策略至关重要:

提交后重定向

不要在同一页面上显示响应,而是将用户重定向到提交表格后单独的页面。这确保了刷新页面加载时,它是一个新的 GET 请求,而不是已处理的 POST 请求的重复。

示例:

// submit
// set success flash message (you are using a framework, right?)
header('Location: /path/to/record');
exit;
登录后复制

禁用浏览器缓存

防止浏览器缓存您的表单,将以下标头添加到您的 PHP 脚本中:

header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
登录后复制

唯一页面令牌

为每个表单提交在服务器上生成唯一令牌。将此标记作为隐藏字段包含在表单中,并在处理之前对其进行验证。如果令牌不匹配或丢失,则将请求作为重复提交丢弃。

示例(带有会话令牌):

<?php
session_start();

// Generate a unique token and store it in the session
$token = md5(uniqid(mt_rand(), true));
$_SESSION['token'] = $token;

?>

<!DOCTYPE html>
<html>
<body>

<form action="submit.php" method="post">
  <input type="text" name="name">
  <input type="hidden" name="token" value="<?php echo $token; ?>">
  <input type="submit" value="Submit">
</form>

</body>
</html>
登录后复制
<?php
session_start();

// Get the submitted token
$token = $_POST['token'];

// Check if the token matches the session token
if ($token != $_SESSION['token']) {
  // Discard the request
} else {
  // Process the form data
}
登录后复制

结论

通过实施这些技术,您可以有效防止不必要的表单重新提交由于页面刷新,并确保您的 Web 应用程序按预期运行。

以上是如何防止 Web 应用程序中意外重新提交表单?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板