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

Teo*_*dor 32 php cookies setcookie

我正在使用多语言网站,所以我尝试了这种方法:

echo $_COOKIE["lg"];
if (!isset($_COOKIE["lg"]))
    setcookie("lg", "ro");
echo $_COOKIE["lg"];
Run Code Online (Sandbox Code Playgroud)

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

一切正常,但如果我第一次进入这个页面,第一次和第二次echo都没有返回.只有当我刷新页面时才设置cookie,然后echo打印出我期待的"ro"字符串.

如何设置此cookie以便echo在第一次访问/页面加载时从第二个看到它的值?应该无需刷新页面或创建重定向.

Tre*_*non 82

回答

你不能根据PHP手册:

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

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

解决

但是你也可以通过设置$_COOKIE电话来解决它setcookie():

if(!isset($_COOKIE['lg'])) {
    setcookie('lg', 'ro');
    $_COOKIE['lg'] = 'ro';
}
echo $_COOKIE['lg'];
Run Code Online (Sandbox Code Playgroud)

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

0b1*_*011 10

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

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

如果在调用此函数之前存在输出,则setcookie()将失败并返回FALSE.如果setcookie()成功运行,它将返回TRUE.这没有指示用户是否接受该cookie.

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

资源