【问题标题】:Cookies aren't persisting in PHP?Cookies 没有保留在 PHP 中?
【发布时间】:2012-09-17 02:50:44
【问题描述】:

如何让 cookie 在 php 中持久化?


give_cookie.php

<?php
    if (!isset($_COOKIE["muffin"]))
        setcookie("muffin", "55", 100 * 60 * 60 * 24 * 30);
    $_COOKIE["lid"]=true;
?>

jar.php

<?php
    var_dump($_COOKIE);
    if($_COOKIE["lid"])
        echo "open";
?>

按该顺序运行代码会给我输出:

array(0) { } 注意:未定义索引:第 3 行 jar.php 中的盖子

jar.php 中的代码嵌入give_cookie.php 会得到输出:

array(1) { ["lid"]=> bool(true) } 打开

【问题讨论】:

  • 哦,等等,也许我需要将到期时间添加到当前日期?
  • Iirc,在 setcookie 之后的以下请求之前,cookie 对 PHP 不可用。如有错误请指正。
  • 另外,我不确定设置 $_COOKIE 数组是否真的会发送 cookie。也可以试试 setcookie 作为“盖子”。
  • 请注意,cookie 存储在浏览器中,而不是 PHP 本身。如果您发送 cookie,浏览器将在下一个请求中将其发回。
  • @JonStirling,你是对的。但是,他给全局变量$_COOKIE["lid"]设置了一个值,而不是正确地设置,所以它在同一个脚本中可用,但在下次刷新时不可用。

标签: php cookies session-cookies setcookie


【解决方案1】:

您应该提供 cookie 何时过期的 UNIX 时间戳(从纪元开始计算)作为函数调用的第三个参数。

cookie 过期的时间。这是一个 Unix 时间戳,所以是数字 自纪元以来的秒数。换句话说,你很可能会设置 这与 time() 函数加上你之前的秒数 想让它过期。或者你可以使用 mktime()。 time()+60*60*24*30 会 将 cookie 设置为 30 天后过期。如果设置为 0 或省略,则 cookie 将在会话结束时过期(当浏览器 关闭)。

我建议您阅读setcookie 的文档。

【讨论】:

  • 谢谢,在我的代码中的某个时候省略了 time() 函数,不知道为什么。将在 10 分钟内接受作为答案。
【解决方案2】:

您正在为muffin 设置cookie 并尝试检索lid。您还需要为lid 设置cookie。

【讨论】:

    【解决方案3】:

    我认为你设置的时间仍然是过去

    目前

    time() = 1348584550
    
    100 * 60 * 60 * 24 * 30 =  259200000
    

    那就试试吧

    setcookie("muffin", "55", time() + (100 * 60 * 60 * 24 * 30));
    
    if($_COOKIE["muffin"])
        echo "open";
    

    【讨论】:

      【解决方案4】:

      其他答案是正确的,但还有另一个考虑因素。 当服务器将 html 发送到客户端时设置 Cookie,并在用户请求页面时从用户接收它们。这意味着,如果您尝试读取您刚刚正确设置的 cookie,它将为空,直到用户下次重新加载页面。避免这种情况的唯一方法是,正如您所做的那样,不确定是否故意,手动分配 cookie 的值并同时设置它,因为它是一个超全局的。这不是一个好的做法,因为 Cookie 的值在执行时会丢失。这应该工作,但不会做太多工作:

      give_cookie.php

      <?php
          if (!isset($_COOKIE["muffin"]))
              setcookie("muffin", "55", 100 * 60 * 60 * 24 * 30);
          setcookie("lid", TRUE, time() + 100 * 60 * 60 * 24 * 30);
          $_COOKIE["lid"]=TRUE;
      
      ?>
      

      jar.php

      <?php
          if($_COOKIE["lid"])
              echo "open";
      ?>
      

      PS,你的代码还有很多问题(除了它没有任何用处)。告诉我们您想要实现的目标,以便我们为您提供更多帮助。

      【讨论】:

      • 谢谢,使用TRUEtrue 有优势吗?
      猜你喜欢
      • 2013-11-08
      • 2012-06-12
      • 1970-01-01
      • 2015-10-20
      • 2013-07-16
      • 1970-01-01
      • 2011-07-28
      • 2018-04-08
      • 1970-01-01
      相关资源
      最近更新 更多