【发布时间】:2015-05-28 12:24:14
【问题描述】:
在此之前,我有一个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";
}
【问题讨论】:
-
我会删除
if ($_POST)包装器。它只是增加了不必要的复杂性。if (isset($_POST['submit']))绰绰有余 -
你破解了我给你写的代码吗? :(
-
貌似每次页面加载都会生成
$token -
不,是为了避免表单被提交两次。
-
@KevinNagurski,Epodax 是对的,我想说{ 如果会话令牌与表单令牌相同,则拒绝调用对象并传回false,否则如果设置且不等于,它允许发布,如果没有设置会话令牌,则将其设置为等于发布令牌并允许发布}