检查PHP Cookie是否存在,如果未设置其值

2022-08-30 12:09:50

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

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

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

一切正常,除了如果我第一次进入此页面,第一个和第二个不返回任何内容。只有当我刷新页面是cookie集,然后两者都打印我期望的“ro”字符串。echoecho

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


答案 1

你不能根据PHP手册

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

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

变通方法

但是,您也可以通过在调用时设置来解决此问题:$_COOKIEsetcookie()

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

答案 2

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

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

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

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


推荐