浏览器是否在重定向时设置了cookie?

时间:2018-05-05 15:07:49

标签: php cookies header

我想我在这里犯了一个尴尬的错误,但我真的找不到它。我使用过浏览器开发工具,并密切关注每一步。这是代码,我希望在按下Restart链接后重置访问次数,但它只是不断递增:

//test.php:
 <?php
if(isset($_COOKIE['visits']) && isset($_GET['restart'])){
    if($_GET['restart']=='true') {
        setcookie('visits',null,time()-24*3600*365,'/');
        unset($_COOKIE['visits']);
        header("Location: test.php");
        exit;
    }
}
if(!isset($_COOKIE['visits'])){
    $visits = 1;
    setcookie('visits',$visits,time()+24*3600*365);
    echo "Welcome To This Website";
}
else{
    $visits = $_COOKIE['visits']+1;
    setcookie('visits',$visits,time()+24*3600*365);
    echo "You've visited this website ".$_COOKIE['visits']. ' times before.<br>';
    echo "<a href='?restart=true'>Restart</a><br>";
}

我现在最后想到的是,当使用重定向标题时,浏览器会在设置收到的Cookie之前执行重定向请求 ,我不确定虽然。否则,我无法想到任何可能导致此行为的事情。有人可以对此发表评论并说清楚吗?

1 个答案:

答案 0 :(得分:1)

在您的代码中,它看起来像是已发送标头,并且在设置Cookie之前会重定向用户。您可以尝试output buffering并直接在echo ".";行之前回显一个点header(...,以确保在重定向之前与客户进行一些通信。

编辑:我对此处发生的事情的理解是同时发送Cookie和重定向标头,但在某些服务器/客户端组合中,重定向正在浏览器有机会设置之前发生饼干。将一些内容与标题一起推送到浏览器使其有机会处理cookie,但您必须在php.ini中启用输出缓冲,或者在标题设置之前和之后使用ob_start()ob_end_flush()和回声。