php - html表单:发送时防止重新提交
问题描述
我有这个表格:
<form action="" method="post" name="my_form">
<input type="text" name="my_input">
</form>
您可以编写一些文本并按回车键提交。
我的问题:当您多次按回车键时,它也会多次发送到我的服务器。
有这样的解决方案:
onsubmit="my_button=true;return true;"
但是这些解决方案需要一个提交按钮。
有没有办法在不添加(隐藏)提交按钮的情况下做到这一点?
解决方案
如果您想绝对确定,例如,提交两次表单会导致严重损坏/导致恶意事情发生,那么您需要检查此服务器端。Web 开发和一般开发的一条规则是永远不要信任您的最终用户,并且通过简单地使用 JavaScript 阻止表单,您无法确保恶意用户不会绕过 JavaScript 来发送表单两次。
你可以做的是这样的:
重要提示:这只是一个概念证明示例来解释这个想法,这不是一个 100% 防弹的解决方案。
形式
<?php
session_start();
$_SESSION['nonce'] = random_number();
?>
<html>
...
<form method="post" action="process.php">
<input type="hidden" name="nonce" value="<?php echo $_SESSION['nonce']; ?>" />
... other form elements ...
</form>
...
进程.php
<?php
session_start();
$nonce = isset($_POST['nonce']) ? (int)$_POST['nonce'] : 0;
$session_nonce = $_SESSION['nonce'];
if ($_SESSION['nonce'] != $nonce) {
die("Invalid nonce, double submission detected.");
}
$_SESSION['nonce'] += 1; // this will cause the previous check to fail on a second submission.
推荐阅读
- java - 比较 Java 中的状态
- php - Codeigniter 中的取消链接功能不起作用
- javascript - 当我重新加载页面时,受污染的画布可能不会在 chrome 上导出错误
- python - 面板 (T*N) 数据的 Pandas 加权平均值
- html - 在 CGI 脚本上反复出现 500 错误 - 前端 HTML 有效,但 CGI 无效 [MySQL]
- php - PHP / MySQL - 如何将具有动态列名的数据(列到行)转换为表
- sqlite - 如何使用别名在 JavaFX 中填充 TableView
- python - 从 gridsearchcv 中提取结果
- django - handling duplicate objects with custom slugs via mixins
- html - 如何向屏幕阅读器指示 span 元素?