php $ _COOKIE isset

时间:2012-02-23 14:47:17

标签: php cookies

我正在使用此代码设置cookie,然后查看它们是否存在

setcookie("token", "value", time()+60*60*24*100, "/");
setcookie("secret", "value", time()+60*60*24*100, "/");
setcookie("key", "value", time()+60*60*24*100, "/");

if (!isset($_COOKIE['token']) || !isset($_COOKIE['secret']) || !isset($_COOKIE['key'])) {

// do something because one of the cookies were not set

}

即使所有三个cookie都在我的浏览器中设置,它仍会运行if()语句。通过消除过程,我发现中间cookie !isset($_COOKIE['secret'])似乎导致if()语句运行,即使我的浏览器中设置了cookie secret。该脚本表示,当我查看浏览器并且已经设置时,它尚未设置。你能想到为什么php说它没有设置的原因吗?

3 个答案:

答案 0 :(得分:7)

setcookie仅定义要与其他HTTP标头一起发送的Cookie,并且可以在下一页加载$_COOKIE时访问它们。使用您的代码,不会发送HTTP标头。

未设置Cookie时,您只需要setcookie。像:

if (!isset($_COOKIE['token'])) {
    setcookie("token", "value", time()+60*60*24*100, "/");
}

答案 1 :(得分:0)

使用

if(true === array_key_exists('secret', $_COOKIE) && strlen($_COOKIE['secret']) > 0) {
}

答案 2 :(得分:0)

作为我的测试,我们不能同时使用cookie。如果您设置cookie,您需要重新加载页面才能获取这些内容。 这样放

if (!isset($_COOKIE['token'])) {
    setcookie("token", "value", time()+60*60*24*100, "/"); //this set cookies for first time
}