Php 阻止邮件重新发送信息

Php 阻止邮件重新发送信息,php,html,post,Php,Html,Post,在此之前,我曾问过一个问题,我问过一种方法来阻止一篇文章在提交时被怨恨 社区给了我这个功能: function cansend($token) { if(isset($_SESSION['token'])) { if ($token == $_SESSION['token']){ $continue = false; } else { $continue = true;

在此之前,我曾问过一个问题,我问过一种方法来阻止一篇文章在提交时被怨恨

社区给了我这个功能:

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>

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

<?php 
$_SESSION['token'] = $somerandom; //give the session token a random value
$token = $somerandom; //give the same value to the variable token
?>
每次打开主页时,它都会更改会话变量。因此,仍然包含旧令牌的post值将不再与较新的会话令牌匹配


在我看来,这样做更简单,不需要为它创建函数。

我会删除
if($\u POST)
包装器。这只是增加了不必要的复杂性<代码>如果(isset($\u POST['submit'])已经足够了你是否破坏了我为你编写的代码?:(看起来,
$token
在每次加载页面时都会生成。不,这是为了避免表单提交两次。@KevinNagurski,Epodax是对的,我想说{如果会话令牌与表单令牌相同,则拒绝调用对象并传回false,否则如果设置了会话令牌且不相等,则允许post,如果未设置会话令牌,则将其设置为等于post令牌并允许post发生}我想要这个功能,因为我有很多页面我想停止重新发送,而且sessiontoken和posttoken将始终是相同的,因为它们都设置为$somerandom,因此,它永远不会发布信息,这不是我想要的,我希望它只发送一个帖子,而不是随后的重新提交。我还想在提交后,如果不让帖子与会话匹配,则会删除that@samswift如果有人使用我认为您试图阻止的旧post数据刷新页面,旧的$\u post['token']仍将包含旧值,而$\u会话['token']将包含一个新的令牌。EDIT*我将在以后有时间时为此添加一个函数。这仍然存在一个问题,即如果旧的post令牌=1234,新的会话令牌可能等于2345,这意味着比较将不起作用,并在每次后续重新提交时重新发送数据1234==2345如何返回真值?:/创建一个更大的随机值——它们都是完全相同的字符串或极不可能的概率——因为post令牌(1234)!==会话令牌(2345),因此函数按其应该的方式返回true
<?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>
if($_POST['token'] == $_SESSION['token']){
    //Do something
}