早上好,
我遇到了这样的问题。我想用cookies语言存储,用户会选择哪种语言。局部变量中的值仍然更改,但cookie中的值始终相同。即使我总是删除cookie,然后我再次创建它,存储在cookie中的值是错误的,我的本地是好的。这是我的代码:
<?php
if (isset($_GET['lng'])) {
$lng = $_GET['lng'];
if (($lng != "en") && ($lng != "de")) {
$lng = "en";
}
} else {
if(!isset($_COOKIE['lang'])) {
$lng = "en";
} else {
$lng = $_COOKIE['lang'];
}
}
if(isset($_COOKIE['lang'])) {
setcookie("lang", $_COOKIE['lang'], time()-10); //here I try to remove cookie and then create another
}
setcookie("lang", $lng, time()+5);
print_r($_COOKIE);
echo $lng;
?>
print_r总是会返回主语言(en),即使在变量$ lng中也有de。我想,会有一些愚蠢的问题,但我无法修复它。这个删除行(我评论)是因为在官方php网站上写的问题:
小心在子目录中使用相同的cookie名称。设置一个简单的cookie
setcookie(“region”,$ _GET ['set_region']);
在root /中,例如在这种情况下/ admin /将创建2个具有不同路径的cookie。在阅读cookie时,只读取第一个cookie,无论路径如何。
我认为我有类似的问题。但是这并没有解决我的问题,即使5秒后的cookie将到期,cookie也会再次写入错误的“en”值。
感谢您的回答
答案 0 :(得分:1)
你能尝试一下吗,它对我有用。 我编写了一些代码,抱歉用一行if语句来混淆它。
我还将cookie时间设置为1天,因此在测试代码时它不会消失。
请记住,您必须更新页面以阅读新Cookie,它将落后$lng
一步。
<?php
$allowed = array('en', 'de');
$chosen = $_GET['lng'] ? $_GET['lng'] : ($_COOKIE['lang'] ? $_COOKIE['lang'] : 'en');
$lng = in_array($chosen, $allowed) ? $chosen : 'en';
setcookie("lang", $lng, time()+24*60*60, '/');
var_dump($_COOKIE['lang']);
echo $lng;
?>