php cookie不会重写新值

时间:2013-09-11 07:15:03

标签: php cookies

早上好,

我遇到了这样的问题。我想用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”值。

感谢您的回答

1 个答案:

答案 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;

?>