【问题标题】:php cookie not working after reload重新加载后php cookie不起作用
【发布时间】:2013-10-23 11:56:53
【问题描述】:

我现在正在编写我的语言脚本并使用 cookie:

setcookie("lang", "nl", time() + (24 * 60 * 60));
if(isset($_GET['lang'])) {
    $_COOKIE['lang'] = $_GET['lang'];
}

如果我转到 mysite/?lang=en,该网站将使用英语,但当我转到 mysite/ 时,该网站将返回主要语言(荷兰语)。 cookie 已设置,我可以在谷歌浏览器中看到信息,但它不起作用。

Print_r(mysite/)(在设置语言之前)

Array ( [lang] => nl ) 

Print_r(mysite/?lang=en)(设置新语言)

Array ( [lang] => en )

Print_r(mysite/)(删除 ?lang=en 后)

Array ( [lang] => nl ) 

我知道这个脚本现在是不安全的,但它现在不起作用。我会在它工作后添加安全性。

【问题讨论】:

  • "我会在它工作后添加安全性。"我经常听到这个......
  • 无论如何,您都不应该传输 cookie 将提供哪种语言的信息——它应该是 URL 的一部分。至少如果您希望搜索引擎能够完全索引您页面的不同语言版本。
  • 我的网站只对 Nederlandse Spoorwegen 有用。请参阅 Livetrein.nl(此处的 lang 脚本不工作,很快就会工作)

标签: php cookies


【解决方案1】:

因为你每次都将cookie中的语言设置为“nl”,所以你访问了该站点,并且只有设置了$_GET['lang'],然后才将其设置为另一种语言;但没有$_GET['lang'],它再次重置为“nl”。

setcookie("lang", "nl", time() + (24 * 60 * 60));

if(isset($_GET['lang'])) {
    $_COOKIE['lang'] = $_GET['lang'];
}

应该是:

if (!isset($_COOKIE['lang'])) {
    setcookie("lang", "nl", time() + (24 * 60 * 60));
}

if (isset($_GET['lang'])) {
    setcookie("lang", $_GET['lang'], time() + (24 * 60 * 60));

    $_COOKIE['lang'] = $_GET['lang'];
}

当您使用 setcookie 时,它​​不会存储在 $_COOKIE 中,只有在下次加载站点后。

【讨论】:

  • 它现在只在 2 次重新加载后发生变化。
  • 现在好了,检查一下。
  • 在 2 次重新加载后仍然会发生变化。
  • 自己修复:if (!isset($_COOKIE['lang'])) { setcookie("lang", "nl", time() + (24 * 60 * 60)); } if (isset($_GET['lang'])) { $_COOKIE["lang"] = $_GET["lang"]; }
  • 错了,因为你必须使用setcookie,来设置时间,cookie多久有效。您的评论不会存储在您的 cookie 中,当您 Print_r(mysite/) 时,它会将其重置回“nl”...现在查看我编辑的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-29
相关资源
最近更新 更多