我正在开发一个多语言网站,所以我尝试了这种方法:
echo $_COOKIE["lg"];
if (!isset($_COOKIE["lg"]))
setcookie("lg", "ro");
echo $_COOKIE["lg"];
这个想法是,如果客户没有lg
Cookie(因此,他们第一次访问此网站),那么设置一个Cookie lg = ro
对于那个用户。
一切正常,但如果我第一次进入此页面,则第一个和第二个echo
不返回任何内容。只有当我刷新页面时才会设置cookie,然后echo
打印出#34; ro"我期待的字符串。
如何设置此Cookie,以便在用户首次访问/页面加载时从第二个echo
查看其值?应该无需刷新页面或创建重定向。
答案 0 :(得分:75)
您不能根据PHP manual:
设置好cookie后,可以在下一页访问它们 使用$ _COOKIE或$ HTTP_COOKIE_VARS数组加载。
这是因为cookie在响应头中发送到浏览器,然后浏览器必须在下一个请求时将它们发回。这就是为什么它们仅在第二页加载时可用。
但您可以通过在致电$_COOKIE
时设置setcookie()
来解决此问题:
if(!isset($_COOKIE['lg'])) {
setcookie('lg', 'ro');
$_COOKIE['lg'] = 'ro';
}
echo $_COOKIE['lg'];
答案 1 :(得分:10)
Cookie仅在请求时发送,因此无法在分配后立即检索(仅在重新加载后才可用)。
设置好Cookie后,可以使用$ _COOKIE或$ HTTP_COOKIE_VARS数组在下一页加载上访问这些Cookie。
如果在调用此函数之前存在输出,则setcookie()将失败并返回FALSE。如果setcookie()成功运行,它将返回TRUE。此 不表示用户是否接受了Cookie 。
在下次加载网页之前,Cookie不会显示该Cookie应该可见。要测试cookie是否已成功设置,请在cookie过期前检查下一个加载页面上的cookie。过期时间通过expire参数设置。调试cookie存在的一种好方法是简单地调用print_r($ _ COOKIE);.