当前位置:  开发笔记 > 编程语言 > 正文

停止数据插入数据库两次

如何解决《停止数据插入数据库两次》经验,为你挑选了3个好方法。

我是PHP的新手,我想知道当用户在与表单相同的页面刷新时,其他程序员使用什么方法/预防来阻止数据输入MySQL数据库两次?显然它发生了,我需要一个很好的方法来阻止它.

谢谢,本



1> Ilya Birman..:

我称之为网络编程的黄金法则:

永远不要用身体回应POST请求.始终执行工作,然后使用Location:标头进行响应以重定向到更新的页面,以便浏览器使用GET请求它.

这样,清爽不会对你造成任何伤害.

另外,关于评论中的讨论.为防止双重发布,例如,意外双击"提交"按钮,将表单的md5()存储在文本文件中,并将新表单的md5与存储的md5进行比较.如果他们是平等的,你就有一个双重职位.


我对使用重新提交有问题的表单使用nonces("一次使用的数字").创建一个随机数/字符串,将其存储在会话数据中,并将其作为隐藏字段添加到表单中.在表单提交时,检查POSTed值是否与会话值匹配,然后立即清除会话值.重新提交将失败.
jeroen,好的浏览器不会警告你(Opera).因为我们开发人员必须处理它,用户并不在意.他说F5,一定要刷新.用户将在没有阅读问题的情况下按"是" - 用户将是正确的!

2> chaos..:

处理表单,然后重定向到结果页面.然后重新加载仅重新显示结果页面.



3> James Socol..:

Ilya的回答是正确的,我只想添加一些比评论更多的内容:

如果重新提交是危险的(返回并再次提交,重新加载结果页面[如果你没有采取伊利亚的建议]等)我使用"随机数"来确保表格只能通过一次.

在表单页面上:


// ... snip ...

在处理页面中:



表单提交一次后,无法再次提交,除非用户故意将其填写第二次.

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有