PHP:为什么我的cookie没有正确设置?

时间:2017-04-12 02:19:30

标签: php cookies

我的代码出了什么问题?当我运行它时,它告诉我:"注意:未定义的索引:访问"在正文部分的if($_COOKIE["visits"] == 1)$numOfVisits = $_COOKIE["visits"];行。

<!DOCTYPE html>

<?php 
if (!isset($_COOKIE["visits"])) 
    setcookie("visits", 1, time()+3600*24*365);
else{
    $visits = $_COOKIE["visits"] + 1;
    setcookie("visits",$visits, time()+3600*24*365);
}
?>

<html lang="en">
    <head>
        <title>numOfVisits</title>
        <meta charset="utf-8"/>
    </head>
    <body>
        <?php
        if($_COOKIE["visits"] == 1)
            echo("Welcome to my webpage! It is your first time that you are here.");
        else{
            $numOfVisits = $_COOKIE["visits"];
            echo("Hello, this is the #$numOfVisits time that you are visiting my webpage.");
        }
        ?>
    </body>
</html>

1 个答案:

答案 0 :(得分:1)

问题是您只能在将任何标头从服务器发送到客户端之前设置cookie或启动会话。 (setcookie上的See documentation

  

setcookie()定义了一个与其他HTTP头一起发送的cookie。与其他标头一样, cookie必须在脚本的任何输出之前发送(这是协议限制)。 这要求您在输出之前调用此函数,包括和标记以及任何空格。

这在实践中意味着您在输出内容后无法设置cookie。在这种情况下,您需要在设置Cookie之前输出<!doctype html>

解决方案是在输出任何HTML之前设置之前的

解决方案:

<?php 
if (!isset($_COOKIE["visits"])) 
    setcookie("visits", 1, time()+3600*24*365);
else{
    $visits = $_COOKIE["visits"] + 1;
    setcookie("visits",$visits, time()+3600*24*365);
}
?>
<!doctype html>
...