我已经为我的网站创建了一个cookie,以存储用户的语言选择。它在本地主机上工作正常。但是,在将网站上传到我的网站空间后,该cookie永远不会被我测试过的任何浏览器(Firefox,Chrome,Opera)设置。
在任何html
或echo
开头DOCTYPE
之前设置cookie。在其上方只有一些PHP
变量声明。
Cookie在24小时后过期。设置更长的到期日期也没有帮助。
我还用'/'
之类的URL替换了('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服务器上却不能正常工作?非常感谢您提供有关发生问题的帮助。
编辑: 我用一个带有我显示的Cookie代码的PHP文件进行了更多测试:
设置$i18n->setForcedLang('');
有效,$_GET['lang']
返回正确的语言,具体取决于单击的按钮。如果我通过网络服务器运行代码,实际上只有setcookie('language', 'lang-de', time() + 86400, '/');
(或'lang-en'
)似乎被浏览器忽略。
答案 0 :(得分:0)
如果您的网站没有SSL证书,则应确保将下面的PHP选项设置为0。
ini_set('session.cookie_secure', '0');
其他推荐设置:
ini_set('session.cookie_lifetime', '0');
ini_set('session.cookie_httponly', '1');