不要两次提交相同的数据


Do not submit same data twice php

如果完全相同的数据尚未发送,我将如何在PHP中检查?

这将禁止用户(意外地)在我的网站上发送两次具有相同数据的联系表单!

谢谢!

例如,可以序列化表单数据并将其存储在会话变量中。接收到表单数据后,首先检查会话中是否已经存在相同的数据。你也可以在表单中添加一个随机数作为隐藏的输入字段,它也存储在$_SESSION["rand"]中。在第一次提交时,检查随机数是否相等,然后在会话数组中删除(或更改)随机数。这样,一个表单只能使用一次,在第二次提交时,编号将会不同,并且不再被接受。

生成表单时:

$_SESSION["rand"] = rand();

并加上:

<input type='hidden' name='rand' value='{$_SESSION["rand"]}' />

收到后检查:

if ( $_SESSION["rand"] === $_POST["rand"]) {
    $_SESSION["rand"] = false;
    // continue with stuff...

当然,在这种布局下,单个用户只能同时打开单个表单,因为打开第二个表单将覆盖随机数。更好的方法是为每个表单创建单独的会话键和值组合,这样两个表单就不会相互覆盖。