[英]Check if a PHP cookie exists and if not set its value
我正在开发一个多语言网站,所以我尝试了这种方法:
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后,可以使用$ _COOKIE或$ HTTP_COOKIE_VARS数组在下一页加载时访问它们。
如果在调用此函数之前存在输出,则setcookie()将失败并返回FALSE。 如果setcookie() 成功运行 ,它将返回TRUE。 这并不表示用户是否接受该cookie。
在下一次加载可以看到cookie 的页面之前 ,Cookie不会显示。 要测试cookie是否已成功设置,请在cookie过期前检查下一个加载页面上的cookie。 过期时间通过expire参数设置。 调试cookie存在的一种好方法是简单地调用print_r($ _ COOKIE);.
如果你用php setcookie
设置cookie,你can see the set and the value
,例如,用firefox的developer tools
just in time
。
但是,如果您想阅读、获取或检查 cookie 和其中的值to work with that cookie
PHP
中的该 cookie,则But you need to reload/load
相同/ page
。
通过此示例,您可以choose
是否要使用PHP
、 HTML
或JAVASCRIPT
reload
同一页面。
如果 cookie 不被接受或 cookies 被禁用,则获得加载循环并且浏览器停止加载页面。
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']);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.