【问题标题】:Detecting if cookies are enabled with PHP, header redirection检测是否使用 PHP 启用了 cookie,标头重定向
【发布时间】:2012-02-18 17:13:41
【问题描述】:

我在这里真的很痛苦,试图让这个 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 变量与标题一起传递,以便我知道他们在谈论哪个问题以及他们是否单击了“否”或“是”。

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

【问题讨论】:

    标签: php ajax cookies header


    【解决方案1】:

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

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

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

    【讨论】:

    • 非常感谢帖木儿!丢失的exit; 确实是问题所在。
    • 您需要始终记住调用header() 不会终止脚本执行。这就是为什么需要exit;die();...
    猜你喜欢
    • 2012-03-15
    • 2011-06-16
    • 1970-01-01
    • 2011-10-03
    • 2020-10-20
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多