我正在一个多语言网站上工作,所以我尝试了这种方法:
echo $_COOKIE["lg"];
if (!isset($_COOKIE["lg"]))
setcookie("lg", "ro");
echo $_COOKIE["lg"];
这个想法是,如果客户端没有lg
cookie(因此,这是他们第一次访问这个网站),那么为该用户设置一个cookie lg = ro
。
一切正常,除了如果我第一次进入此页面,第一个和第二个echo
什么也没返回。只有当我刷新页面时,cookie 才会设置,然后两者都echo
打印我期望的"ro"字符串。
如何设置此 Cookie 以便在用户首次访问/页面加载时从第二个echo
中查看其值?应该不需要刷新页面或创建重定向。
答案
你不能根据PHP手册:
设置好 Cookie 后,可以在下一页访问它们 使用 $_COOKIE 或 $HTTP_COOKIE_VARS 数组加载。
这是因为 cookie 以响应标头的形式发送到浏览器,然后浏览器必须将它们与下一个请求一起发送回去。这就是为什么它们仅在第二次页面加载时可用的原因。
解决方法
但是您可以通过在调用setcookie()
时设置$_COOKIE
来解决此问题:
if(!isset($_COOKIE['lg'])) {
setcookie('lg', 'ro');
$_COOKIE['lg'] = 'ro';
}
echo $_COOKIE['lg'];
请求时发送,因此无法在分配后立即检索(仅在重新加载后可用)。
设置好 cookie 后,可以在下一页加载时使用 $_COOKIE 或 $HTTP_COOKIE_VARS 数组访问它们。
如果在调用此函数之前存在输出,setcookie() 将失败并返回 FALSE。如果 setcookie() 成功运行,它将返回 TRUE。这并不表示用户是否接受 Cookie。
在下次加载 Cookie 应该可见的页面之前,Cookie 不会变得可见。要测试是否成功设置了 Cookie,请在 Cookie 过期之前在下一个加载页面上检查该 Cookie。过期时间通过过期参数设置。调试 cookie 存在的一个好方法是简单地调用 print_r($_COOKIE);。
源
如果你用php设置了一个cookie,setcookie
你can see the set and the value
cookie,例如,使用Firefox just in time
developer tools
。
如果您想阅读、获取或检查 cookie 和 PHP
中的 to work with that cookie
中的值,But you need to reload/load
相同/下一个page
。
通过此示例,您可以choose
是否要reload
具有PHP
、HTML
或JAVASCRIPT
的同一页面。
如果 Cookie 未被接受或禁用 Cookie,则会获取加载循环,浏览器将停止加载页面。
LONGVERSION WITH PHP 'header' RELOAD SAME PAGE
:
<?php
$COOKIE_SET = [
'expires' => '0'
,'path' => '/'
// ,'domain' => 'DOMAIN'
,'secure' => 'true'
,'httponly' => 'true'
// ,'samesite' => 'Strict'
];
$COOKIE_NAME = "MYCOOKIE";
$COOKIE_VALUE = "STACKOVERFLOW";
if(!isset($_COOKIE[$COOKIE_NAME])){
setcookie($COOKIE_NAME, $COOKIE_VALUE, $COOKIE_SET);
// YOU NEED TO RELOAD THE PAGE ONCE
// WITH PHP, HTML, OR JAVASCRIPT
// UNCOMMENT YOUR CHOICE
// echo '<meta http-equiv="refresh" content="0;URL=/">';
// echo '<script>window.location.replace("/");</script>';
header("Location: /");
exit;
}
else{
echo ($_COOKIE[$COOKIE_NAME]);
}
?>
SHORTVERSION WITH PHP 'header' RELOAD SAME PAGE
:
if(!isset($_COOKIE['MYCOOKIE'])){
setcookie('MYCOOKIE', 'STACKOVERFLOW');
header("Location: /");
exit;
}
echo ($_COOKIE['MYCOOKIE']);