Php 为什么我的本地化cookie似乎不想更改?

Php 为什么我的本地化cookie似乎不想更改?,php,cookies,localization,internationalization,logic,Php,Cookies,Localization,Internationalization,Logic,为什么我不能换饼干 如果你选择了一种你不能改变的语言。如果你想改变语言,你必须清空你的cookies。为什么呢 if (isset($_GET['setLang']) && $_GET['setLang'] == 'en' || isset($_COOKIE['setLang']) && $_COOKIE['setLang'] == 'en') { setcookie("setLang", 'en', time()+(3600*12)); //expires i

为什么我不能换饼干

如果你选择了一种你不能改变的语言。如果你想改变语言,你必须清空你的cookies。为什么呢

if (isset($_GET['setLang']) && $_GET['setLang'] == 'en' 
|| isset($_COOKIE['setLang']) && $_COOKIE['setLang'] == 'en') {
setcookie("setLang", 'en', time()+(3600*12)); //expires in 12 hours
include('language/en/common.php');
}


elseif (isset($_GET['setLang']) && $_GET['setLang'] == 'se' 
|| isset($_COOKIE['setLang']) && $_COOKIE['setLang'] == 'se') {
setcookie("setLang", 'se', time()+(3600*12)); //expires in 12 hours
include('language/se/common.php');
}

else if (isset($_GET['setLang']) && $_GET['setLang'] == 'fr' 
|| isset($_COOKIE['setLang']) && $_COOKIE['setLang'] == 'fr') {
setcookie("setLang", 'fr', time()+(3600*12)); //expires in 12 hours
include('language/fr/common.php');
}

// default language is english
else {
  include('language/en/common.php');
}

你当然可以换饼干。您无法使用那里的逻辑更改语言,因为按照您的编写方式,
$\u COOKIE
中的现有设置将始终覆盖
$\u GET
中的设置(除了
en
,其中将首先检查
$\u GET
,因此,如果您开始使用另一种语言,现在应该可以切换到
en
)。如果您希望能够更改语言,则需要首先对
$\u GET
执行所有检查,然后对
$\u COOKIE
执行所有检查。

您当然可以更改COOKIE。您不能使用已有的逻辑更改语言,因为按照您编写语言的方式,
$\u COOKIE
中的现有设置将始终结束使用
$\u GET
中的设置(除了
en
,其中将首先检查
$\u GET
,因此如果您使用另一种语言,现在应该可以切换到
en
)。如果你想改变语言,你需要先对
$\u GET
进行所有检查,然后对
$\u COOKIE
进行所有检查。

逻辑也伤害了我的大脑

$language = $_GET['setLang'] || $_COOKIE['setLang']) || 'en';
setcookie("setLang", $language, time()+(3600*12));
include('language/' . $language . '/common.php');

应该达到同样的效果,并解决您的cookie问题(尽管未经测试)。

逻辑也伤害了我的大脑

$language = $_GET['setLang'] || $_COOKIE['setLang']) || 'en';
setcookie("setLang", $language, time()+(3600*12));
include('language/' . $language . '/common.php');
应该达到同样的效果并修复cookie问题(尽管未经测试)

setcookie()定义要删除的cookie 与HTTP的其余部分一起发送 标题。和其他标题一样,cookies 必须在中的任何输出之前发送 您的脚本(这是一个协议) 限制)。这要求您 将此函数的调用放在 任何输出,包括和 标记以及任何空格

setcookie()定义要删除的cookie 与HTTP的其余部分一起发送 标题。和其他标题一样,cookies 必须在中的任何输出之前发送 您的脚本(这是一个协议) 限制)。这要求您 将此函数的调用放在 任何输出,包括和 标记以及任何空格


阅读那些逻辑伤害了我的大脑:(.阅读那些逻辑伤害了我的大脑:(.或者更好的是,为了让事情更清楚,从两个位置中选择一个作为“规范语言源”然后你就有了另一个源覆盖。例如,使
$\u GET
成为规范源,这样你就有了一个
包含
的小模糊,如果
$\u GET
不存在,就有了cookie覆盖,并将
$\u GET
设置为默认值或者更好的是,为了让事情更清楚,从两个位置中选择一个作为“规范语言源”然后你就有了另一个源覆盖。例如,使
$\u GET
成为规范源,这样你就有了一个
包含
的小模糊,如果
$\u GET
不存在,就有了cookie覆盖,并将
$\u GET
设置为默认值ents。请不要这样做。在盲目信任用户的输入并将其用于包含之前,至少要有一个允许的语言代码列表并对此进行验证。(实际上,由于最后一个术语是
'en'
$language
将始终是
真的
)请不要这样做。在盲目信任用户的输入并将其用于包含之前,至少要有一个允许的语言代码列表并对此进行验证。(实际上,由于最后一个术语是
'en'
$language
将始终是
真的