为什么PHP setcookie可以在localhost上运行但不能在浏览器上运行?

时间:2019-12-07 07:53:34

标签: php cookies localhost webserver

我已经为我的网站创建了一个cookie,以存储用户的语言选择。它在本地主机上工作正常。但是,在将网站上传到我的网站空间后,该cookie永远不会被我测试过的任何浏览器(Firefox,Chrome,Opera)设置。

在任何htmlecho开头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')似乎被浏览器忽略。

1 个答案:

答案 0 :(得分:0)

如果您的网站没有SSL证书,则应确保将下面的PHP选项设置为0。

ini_set('session.cookie_secure', '0');

其他推荐设置:

ini_set('session.cookie_lifetime', '0');
ini_set('session.cookie_httponly', '1');