【发布时间】:2019-12-07 07:53:34
【问题描述】:
我为我的网站创建了一个 cookie 来存储用户的语言选择。它在本地主机上运行良好。但是在将网站上传到我的网站空间后,我测试的任何浏览器(Firefox、Chrome、Opera)都不会设置 cookie。
cookie 在任何html 或echo 之前设置,在DOCTYPE 开始标记之前。它上面只有一些PHP 变量声明。
cookie 在 24 小时后过期。设置更长的到期日期也无济于事。
我还用我的网址替换了'/',比如('mysite.de'),但没有任何效果。
我确保我的浏览器接受 cookie。
这是我的PHP 代码:
// --- TRANSLATION ---
require_once 'i18n.class.php';
$i18n = new i18n('lang/lang_{LANGUAGE}.ini', 'langcache/', 'de');
$i18n->setForcedLang('de');
// get language cookie
if (isset($_COOKIE['language']) && $_COOKIE['language']== "lang-de") {
// set language to German
$i18n->setForcedLang('de');
} elseif (isset($_COOKIE['language']) && $_COOKIE['language']== "lang-en") {
// set language to English
$i18n->setForcedLang('en');
}
// language buttons & set cookie
if(isset($_GET['lang'])) {
$lang=$_GET['lang'];
if ($lang == 'de') {
$i18n->setForcedLang('de');
setcookie('language', 'lang-de', time() + 86400, '/');
}
if ($lang == 'en') {
$i18n->setForcedLang('en');
setcookie('language', 'lang-en', time() + 86400, '/');
}
}
$i18n->init();
?>
这是相关的HTML(选择语言的按钮):
<div class="language">
<a href="?lang=de" name="lang-de" class="lang-de">DE</a>/
<a href="?lang=en" name="lang-en" class="lang-en">EN</a>
</div>
为什么我的代码在 localhost 上可以正常工作,但在 Web 服务器上却不行?非常感谢您就这里出了什么问题提供帮助。
编辑: 我用一个 PHP 文件进行了更多测试,其中仅包含我显示的 cookie 代码:
设置$i18n->setForcedLang(''); 有效,$_GET['lang'] 返回正确的语言,具体取决于单击的按钮。如果我通过 Web 服务器运行代码,实际上只有 setcookie('language', 'lang-de', time() + 86400, '/');(或 'lang-en')似乎会被浏览器忽略。
【问题讨论】:
标签: php cookies localhost webserver