38

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

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

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

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

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

4

2 回答 2

95

回答

您不能根据PHP 手册

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

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

解决方法

$_COOKIE但是您也可以通过设置when you call来解决它setcookie()

if(!isset($_COOKIE['lg'])) {
    setcookie('lg', 'ro');
    $_COOKIE['lg'] = 'ro';
}
echo $_COOKIE['lg'];
于 2012-05-24T13:40:01.450 回答
13

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

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

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

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

资源

于 2012-05-24T13:39:10.247 回答