检测是否使用PHP启用了cookie,标头重定向

时间:2012-01-25 14:12:48

标签: php ajax cookies header

我真的很痛苦在这里试图让这个ajax电话工作,对不起这个问题的重要性。

用户单击一个按钮,这启动了ajax调用以向数据库添加投票。这是名为“addvote.php”的文件:

<?php
session_start();


/* COOKIECHECK START */

setcookie('test', 1, time()+3600);
if(!isset($_GET['cookies'])){
    header("Location:/thought/addvote.php?cookies=true&id=".$_GET['id']."&ans=".$_GET['ans']);
}

if(count($_COOKIE) > 0){
    $cookies=1;
} else {
    $cookies=0;
}

/* COOKIECHECK END */



if($cookies==1) {

    $id=$_GET["id"];
    $vId="v".$id;

if (((isset($_SESSION[$vId]) && ((time() - $_SESSION[$vId]) > 180))) || (!isset($_SESSION[$vId]))) {
    // last vote was more than 3 minutes ago
    $_SESSION[$vId] = time(); // update/create vote time stamp

        //ADD VOTE TO DATABASE

    }
    else {
    echo "You've voted on this already";
    }
}
else {
    echo "Please enable cookies to make your vote count";
}


?>

应该发生什么:检查用户是否启用了Cookie。如果是这样,他们可以添加投票,如果没有告诉他们启用cookie。如果他们已启用cookie,并且他们还没有投票 - 加上投票,如果他们已经投票,请告诉他们。

实际发生的事情:尚未投票的用户点击按钮,这会启动ajax调用并成功添加投票,不会向用户发送任何消息。然后他们转到另一个问题并单击投票按钮,启动“addvote.php”,但这次它返回“你已经对此投了票”并且加了投票!这使我的页面调用运行两次,首先它添加了投票,然后它再次尝试(并返回错误)。

也许它与header()??

有关

然后每个问题都会返回相同的消息并添加投票 - 除非我等待一段时间然后它会在第一个问题上运行,同样的事情会再次发生。

值得注意的是: GET变量与标题一起传递,以便我知道他们正在讨论哪个问题以及他们是否单击否或是。

再次道歉,这个问题太可怕了。

1 个答案:

答案 0 :(得分:1)

这不会阻止投票作弊。要测试用户是否启用了cookie,您可以在投票页面上使用JavaScript设置cookie并在PHP中进行检查。但是,显然,如果有人想作弊,他或她将手动删除你的cookie。

此外,您需要在exit调用后添加header()以使代码正常工作:

setcookie('test', 1, time()+3600);
if(!isset($_GET['cookies'])){
    header("Location:/thought/addvote.php?cookies=true&id=".$_GET['id']."&ans=".$_GET['ans']);
    exit;
}
相关问题