1

早上好,

我有这样的问题。我想以用户选择的 cookie 语言存储。局部变量中的值仍然改变,但 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']);

在根 / 中,例如在这种情况下 /admin/ 将创建 2 个具有不同路径的 cookie。在读取 cookie 时,无论路径如何,都只会读取第一个。

我以为我有类似的问题。但这并没有解决我的问题,即使 5 秒后的 cookie 过期,cookie 也会再次写入错误的“en”值。

谢谢你的回答

4

1 回答 1

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;

?>
于 2013-09-11T07:49:02.363 回答