Cookie未在PHP中设置

时间:2015-12-15 16:16:55

标签: php cookies

我正试图设置一个像这样的cookie:

<?php

                $cookie_name = "user";
                $cookie_value = "James";
                setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day

            ?>

            <?php if(!isset($_COOKIE['user'])) { ?>
//Do Something

            <?php } ?>

但它没有设置,我使用的是铬,当我检查我的饼干时,它们不存在:(

3 个答案:

答案 0 :(得分:1)

来自setcookie文档:

  

设置完cookie后,可以在下一页加载$_COOKIE数组时访问它们。 Cookie值也可能存在于$_REQUEST

您将无法在初始页面加载时立即访问Cookie。此外,在设置cookie(协议限制)之前,请确保您没有输出任何HTML。

如果您绝对需要立即访问cookie,您可以选择以下几种方法:

  • 设置Cookie后,立即使用header
  • 重新加载页面
  • 如果这不是您想要做的,您可以使用JavaScript来设置Cookie,但是您应该注意有些人在浏览器中禁用了JS。我不会亲自推荐这个解决方案。

答案 1 :(得分:1)

由于Web的无状态特性,在页面加载时设置了

$_COOKIE[]变量。

以下是文档说的内容:

  

设置完cookie后,可以在下一页加载$ _COOKIE数组时访问它们。 Cookie值也可能存在于$ _REQUEST。

但是在设置之后,有很多单词可以立即访问它。

  1. 您可以在设置cookie以访问它时手动设置$_COOKIE[]的值,或者您可以使用如下的中间变量:

    <?php
    
            $cookie_name = "user";
            $cookie_value = "James";
            setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day
            $_COOKIE[$cookie_name] = $cookie_value;
            ?>
    

    if(!isset($_COOKIE['user']))现在将返回true。

  2. 另一个效率低下的解决方案世界是在设置cookie后立即重新加载页面。 像:

            $cookie_name = "user";
            $cookie_value = "James";
            setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day
            header("Location: your_script.php");
        ?>
    

    页面重新加载时,if(!isset($_COOKIE['user']))将再次返回true。

  3. 希望这有帮助! :)

答案 2 :(得分:0)

如评论中所述,cookie在设置它的同一请求中不可见。您需要进行重定向才能访问cookie,例如

setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day    
header('Location: ' . $your_script_location_path);
exit;

此外,支票中的代码

if(!isset($_COOKIE['user'])) {
    // Do something
}
只有在未设置cookie时才会执行