在此之前,我有一个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/