【问题标题】:Check if a PHP cookie exists and if not set its value检查 PHP cookie 是否存在,如果没有设置它的值
【发布时间】:2012-05-31 02:27:12
【问题描述】:

我正在开发一个多语言网站,所以我尝试了这种方法:

echo $_COOKIE["lg"];
if (!isset($_COOKIE["lg"]))
    setcookie("lg", "ro");
echo $_COOKIE["lg"];

这个想法是,如果客户端没有lg cookie(因此,这是他们第一次访问此站点),则为该用户设置一个 cookie lg = ro

一切正常,除了如果我第一次进入这个页面,第一个和第二个echo 什么都不返回。仅当我刷新页面时才设置 cookie,然后echo 都打印我期望的“ro”字符串。

如何设置此 cookie 以便在用户第一次访问/页面加载时从第二个 echo 中查看其值?应该不需要刷新页面或创建重定向。

【问题讨论】:

    标签: php cookies setcookie


    【解决方案1】:

    Cookies 在请求时发送,因此一旦分配就无法检索(仅在重新加载后可用)。

    一旦设置了 cookie,就可以在 下一页加载时使用 $_COOKIE 或 $HTTP_COOKIE_VARS 数组访问它们。

    如果在调用此函数之前存在输出,setcookie() 将失败并返回 FALSE。如果 setcookie() 成功运行,它将返回 TRUE。这表明用户是否接受了 cookie

    在下次加载 Cookie 应可见的页面之前,Cookie 才会可见。要测试 cookie 是否设置成功,请在 cookie 过期之前检查下一个加载页面上的 cookie。过期时间通过 expire 参数设置。调试 cookie 存在的一个好方法是简单地调用 print_r($_COOKIE);。

    Source

    【讨论】:

      【解决方案2】:

      回答

      你不能按PHP manual

      一旦设置了 cookie,就可以在下一页访问它们 使用 $_COOKIE 或 $HTTP_COOKIE_VARS 数组加载。

      这是因为 cookie 在响应标头中发送到浏览器,然后浏览器必须将它们与下一个请求一起发送回来。这就是它们仅在第二个页面加载时可用的原因。

      解决方法

      但是您可以通过在调用setcookie() 时也设置$_COOKIE 来解决它:

      if(!isset($_COOKIE['lg'])) {
          setcookie('lg', 'ro');
          $_COOKIE['lg'] = 'ro';
      }
      echo $_COOKIE['lg'];
      

      【讨论】:

      • 我个人建议不要设置$_COOKIE[] 值。这可以在以后欺骗用户确实拥有此 cookie 的其他一些代码。替代方案是$lg = (isset($_COOKIE['lg']) ? $_COOKIE['lg'] : 'ro'; echo $lg;
      猜你喜欢
      • 1970-01-01
      • 2020-12-30
      • 2013-04-22
      • 2011-09-15
      • 2012-03-10
      • 2020-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多