在此之前,我有一个question的问题,在这里我要求一种方法来阻止一个帖子在提交时被愤怒。
社区给了我这个功能:

function cansend($token) {
    if(isset($_SESSION['token'])) {
        if ($token == $_SESSION['token']){
            $continue = false;
        }
        else {
            $continue = true;
        }
    }
    else {
        $_SESSION['token'] = $token;
        $continue = true;
    }
    return $continue;
}

这是完美的,并且做了我需要它做的事情,但是,由于某些原因,现在它总是返回true,并且不会阻止方法再次被发布。
我的表格是这样写的:
<?php
$token = rand();

if ($_POST) {
    if (isset($_POST['submit'])) {
        if (cansend($_POST['token'])) {
            print $_POST['textinput'];
        }
    }
}
?>

<form action="#" method="post">
    <input type="hidden" name="token" value="<?php echo $token ?>" />
    <input type="text" name="textinput" />
    <input type="submit" value="Submit" name="submit" />
</form>

我需要改变什么,在哪里重新开始?
编辑
实际代码:
$_SLIP = new BettingSlip();
if ($_SLIP->CanSend($_POST['token'])) {
    if (isset($_POST['creditAcc'])) {
        $_SLIP->SetUserBalance($_POST['id'], $_POST['amount'], 'in');
    }
    if (isset($_POST['setLimit'])) {
        $_USERMAN->setlimit($_POST['id'], $_POST['limit']);
    }
}
else {
    echo "Cannot resend the same information twice";
}

最佳答案

最简单的方法是在页面启动时创建一个随机值,并像现在这样将其设置为会话和隐藏表单。

<?php
$_SESSION['token'] = $somerandom; //give the session token a random value
$token = $somerandom; //give the same value to the variable token
?>

下一步,你将令牌回送到一个隐藏的表单中,就像你已经在做的那样
<form action="#" method="post">
    <input type="hidden" name="token" value="<?php echo $token ?>" />
    <input type="text" name="textinput" />
    <input type="submit" value="Submit" name="submit" />
</form>

而在处理表单中,您只需检查$u会话令牌是否与$u POST令牌相同。
if($_POST['token'] == $_SESSION['token']){
    //Do something
}

每次打开主页面时,它都会更改会话变量。因此,仍然包含旧令牌的post值将不再与新会话令牌匹配。
在我看来,这工作更简单,不需要您为它创建函数。

关于php - 阻止帖子重新发送信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30506524/

10-14 06:24