检查 PHP cookie 是不是存在,如果没有设置它的值

Posted

技术标签:

【中文标题】检查 PHP cookie 是不是存在,如果没有设置它的值【英文标题】:Check if a PHP cookie exists and if not set its value检查 PHP cookie 是否存在,如果没有设置它的值 【发布时间】:2012-05-31 02:27:12 【问题描述】:

我正在开发一个多语言网站,所以我尝试了这种方法:

echo $_COOKIE["lg"];
if (!isset($_COOKIE["lg"]))
    setcookie("lg", "ro");
echo $_COOKIE["lg"];

这个想法是,如果客户端没有lg cookie(因此,这是他们第一次访问此站点),则为该用户设置一个 cookie lg = ro

一切正常,除了如果我第一次进入这个页面,第一个和第二个echo 什么都不返回。仅当我刷新页面时才设置 cookie,然后echo 都打印我期望的“ro”字符串。

如何设置此 cookie 以便在用户第一次访问/页面加载时从第二个 echo 中查看其值?应该不需要刷新页面或创建重定向。

【问题讨论】:

【参考方案1】:

Cookies 在请求时发送,因此一旦分配就无法检索(仅在重新加载后可用)。

一旦设置了 cookie,就可以在 下一页加载时使用 $_COOKIE 或 $HTTP_COOKIE_VARS 数组访问它们。

如果在调用此函数之前存在输出,setcookie() 将失败并返回 FALSE。如果 setcookie() 成功运行,它将返回 TRUE。这表明用户是否接受了 cookie

在下次加载 Cookie 应可见的页面之前,Cookie 才会可见。要测试 cookie 是否设置成功,请在 cookie 过期之前检查下一个加载页面上的 cookie。过期时间通过 expire 参数设置。调试 cookie 存在的一个好方法是简单地调用 print_r($_COOKIE);。

Source

【讨论】:

【参考方案2】:

回答

你不能按php manual:

一旦设置了 cookie,就可以在下一页访问它们 使用 $_COOKIE 或 $HTTP_COOKIE_VARS 数组加载。

这是因为 cookie 在响应标头中发送到浏览器,然后浏览器必须将它们与下一个请求一起发送回来。这就是它们仅在第二个页面加载时可用的原因。

解决方法

但是您可以通过在调用setcookie() 时也设置$_COOKIE 来解决它:

if(!isset($_COOKIE['lg'])) 
    setcookie('lg', 'ro');
    $_COOKIE['lg'] = 'ro';

echo $_COOKIE['lg'];

【讨论】:

我个人建议不要设置$_COOKIE[] 值。这可以在以后欺骗用户确实拥有此 cookie 的其他一些代码。替代方案是$lg = (isset($_COOKIE['lg']) ? $_COOKIE['lg'] : 'ro'; echo $lg;

以上是关于检查 PHP cookie 是不是存在,如果没有设置它的值的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 cookie 是不是存在?

php创建了cookie怎么判断的是不是存在和cookie的值

PHP - 检查数组索引是不是存在或为空

如何检查php中是不是存在mcrypt扩展

检查mysql表php中是不是存在任何记录

检查 Cookie 是不是存在