检查PHP cookie是否存在以及是否未设置其值

时间:2012-05-24 13:36:40

标签: php cookies setcookie

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

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

这个想法是,如果客户没有lg Cookie(因此,他们第一次访问此网站),那么设置一个Cookie lg = ro对于那个用户。

一切正常,但如果我第一次进入此页面,则第一个和第二个echo不返回任何内容。只有当我刷新页面时才会设置cookie,然后echo打印出#34; ro"我期待的字符串。

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

2 个答案:

答案 0 :(得分:75)

答案

您不能根据PHP manual

  

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

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

解决方法

但您可以通过在致电$_COOKIE时设置setcookie()来解决此问题:

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

答案 1 :(得分:10)

Cookie仅在请求时发送,因此无法在分配后立即检索(仅在重新加载后才可用)。

  

设置好Cookie后,可以使用$ _COOKIE或$ HTTP_COOKIE_VARS数组在下一页加载上访问这些Cookie。

     

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

     

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

Source