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

新手上路,请多包涵

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

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

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

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

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

原文由 Teodor 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 978
2 个回答

回答

您不能根据 PHP 手册

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

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

解决方法

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

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

原文由 Treffynnon 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

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

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

资源

原文由 0b10011 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题