不要两次提交相同的数据PHP

时间:2015-07-30 10:01:03

标签: php

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

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

谢谢!

2 个答案:

答案 0 :(得分:1)

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

生成表单时:

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

并添加表格:

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

收到后,请检查:

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

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

答案 1 :(得分:0)

您可以存储用户上次在会话中提交内容的时间,然后添加“冷却时间”,如下所示:

$_SESSION['last_submitted'] = time();

然后在验证用户输入时,只需检查自上次提交以来经过的时间。

if(isset($_SESSION['last_submitted']) || $_SESSION['last_submitted'] + 
30 < time())
{
echo 'Valid';
}

然后只需将30改为你想要的冷却时间。

你仍然可以提交相同的数据,但由于“冷却时间”,因此意外的用户不会成为问题。