【问题标题】:Why does PHP setcookie work on localhost but not in the browser?为什么 PHP setcookie 可以在 localhost 上工作,但不能在浏览器上工作?
【发布时间】: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-&gt;setForcedLang(''); 有效,$_GET['lang'] 返回正确的语言,具体取决于单击的按钮。如果我通过 Web 服务器运行代码,实际上只有 setcookie('language', 'lang-de', time() + 86400, '/');(或 'lang-en')似乎会被浏览器忽略。

【问题讨论】:

    标签: php cookies localhost webserver


    【解决方案1】:

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

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

    其他推荐设置:

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

    【讨论】:

    • 我的测试空间没有 SSL。但我总是将 SSL 用于官方发布的网站。我在使用和不使用 SSL 的情况下测试了我的代码,但是在服务器运行时它在这两种情况下都没有设置。服务器由我的网络空间提供商运行,而不是我自己。我可以通过 .htaccess 设置您的建议吗?不过,我会对此进行更多研究。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多