我是PHP的新手,我想知道当用户在与表单相同的页面刷新时,其他程序员使用什么方法/预防来阻止数据输入MySQL数据库两次?显然它发生了,我需要一个很好的方法来阻止它.
谢谢,本
Ily*_*man 40
我称之为网络编程的黄金法则:
永远不要用身体回应POST请求.始终执行工作,然后使用Location:标头进行响应以重定向到更新的页面,以便浏览器使用GET请求它.
这样,清爽不会对你造成任何伤害.
另外,关于评论中的讨论.为防止双重发布,例如,意外双击"提交"按钮,将表单的md5()存储在文本文件中,并将新表单的md5与存储的md5进行比较.如果他们是平等的,你就有一个双重职位.
Ilya的回答是正确的,我只想添加一些比评论更多的内容:
如果重新提交是危险的(返回并再次提交,重新加载结果页面[如果你没有采取伊利亚的建议]等)我使用"随机数"来确保表格只能通过一次.
在表单页面上:
<?php
@session_start(); // make sure there is a session
// store some random string/number
$_SESSION['nonce'] = $nonce = md5('salt'.microtime());
?>
// ... snip ...
<form ... >
<input type="hidden" name="nonce" value="<?php echo $nonce; ?>" />
</form>
Run Code Online (Sandbox Code Playgroud)
在处理页面中:
<?php
if (!empty($_POST)) {
@session_start();
// check the nonce
if ($_SESSION['nonce'] != $_POST['nonce']) {
// some error condition
} else {
// clear the session nonce
$_SESSION['nonce'] = null;
}
// continue processing
Run Code Online (Sandbox Code Playgroud)
表单提交一次后,无法再次提交,除非用户故意将其填写第二次.
| 归档时间: |
|
| 查看次数: |
23665 次 |
| 最近记录: |