php $_COOKIE isset

Posted

技术标签:

【中文标题】php $_COOKIE isset【英文标题】: 【发布时间】:2012-03-13 23:45:46 【问题描述】:

我正在使用此代码设置 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 说它没有设置的任何原因吗?

【问题讨论】:

您的代码对我有用。该块在第一次访问时执行,因为 $_COOKIE 尚未填充来自 setCookie 的值。在进一步调用时,不再执行该块。你有没有安装过 cookie 拦截器? 您使用什么工具来判断该 cookie 是否存在?萤火虫?看起来很奇怪... 【参考方案1】:

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

当未设置 cookie 时,您只需要 setcookie。喜欢:

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

【讨论】:

不要使用 $_COOKIE 来存储您的信息。已分隔变量 $token、$secret 和 $key。并使用 $_COOKIE 中的值加载它们。如果 $_COOKIE 为空,手动初始化它们并调用 setCookie。 或者如果用户没有设置 cookie,请执行 setCookie 并使用 header() 再次将用户重新定位到同一站点。 如果您想立即访问它,也可以在设置后将 cookie 强制放入数组中...setcookie("token", "value"); 然后$_COOKIE['token'] = "value";【参考方案2】:

使用

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

【讨论】:

这不能回答我的问题,为什么我的代码不能工作?当它适用于其他两个 cookie 时。 array_key_exists($_COOKIE, 'secret') === isset($_COOKIE['secret']) 并且 OP 不想检查它是否为空。问题仍然存在 @Basti sorry不一样,如果array_key_exists检查key是否存在,isset检查value是否存在,当value为null时isset返回false。 你是对的。 array_key_exists 还假定 $_COOKIE 是一个数组。如果不是,array_key_exists 将失败并显示警告。但我们可以放心地假设 $_COOKIE 对于每个脚本都是数组类型。我们还可以假设 $_COOKIE 中的值是字符串,因为它们是在 HTTP-Request 中传递的。因此,当使用 $_COOKIE 时,这两个调用实际上是相同的,除非您事先修改 $_COOKIE。 讨厌附和这么古老的东西,但对于后代,array_key_exists 在示例中是倒退的。应该是array_key_exists('secret', $_COOKIE)【参考方案3】:

作为我的测试,我们不能同时使用cookies。如果你设置cookies。你需要重新加载页面来获取这些。 像这样放

if (!isset($_COOKIE['token'])) 
    setcookie("token", "value", time()+60*60*24*100, "/"); //这是第一次设置cookie

【讨论】:

以上是关于php $_COOKIE isset的主要内容,如果未能解决你的问题,请参考以下文章

为啥 PHP 将 $_COOKIE 中的加号替换为空格?

PHP获取Cookie模拟登录

php $_COOKIE isset

PHP获取Cookie模拟登录

php,js清除cookie

php,echo _FILE_;结果直接打印出_FILE_