【问题标题】:Cookie not printing once it is created in the same page [duplicate]Cookie 在同一页面中创建后不打印 [重复]
【发布时间】:2014-03-06 14:02:39
【问题描述】:

我在页面index.php中使用以下代码创建了名为“test”的Cookie,其值为“one”

 <?php
 setcookie('test','one');
 echo $_COOKIE['test'];
 ?>

一旦我打开页面 index.php,Cookie 就不会被打印出来,一旦我刷新页面,就会打印 cookie(因为已经创建了 cookie 而打印)

我的问题是 cookie 是在我第一次运行页面 index.php 时创建的,一旦我打印了应该打印的 cookie,然后

cookie 在第一次运行时没有打印的原因是什么 自己?

【问题讨论】:

    标签: php cookies


    【解决方案1】:

    我的问题是 cookie 是在我运行页面 index.php 时创建的 第一次本身,一旦我打印它应该打印的cookie, 那么

    是的,cookie 是在您第一次运行 index.php 时创建的。

    cookie 在第一次运行时没有打印的原因是什么 自己?

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

    Source

    向下浏览链接以查看常见的陷阱..

    常见的陷阱:

    • 在下一次加载 cookie 应该可见的页面之前,cookie 不会变得可见。要测试 cookie 是否设置成功,请在 cookie 过期之前检查下一个加载页面上的 cookie。过期时间通过 expire 参数设置。调试 cookie 存在的一个好方法是调用print_r($_COOKIE);
    • 必须使用与设置相同的参数删除 Cookie。如果 value 参数是空字符串或 FALSE,并且所有其他参数都与先前对 setcookie 的调用匹配,则将从远程客户端删除具有指定名称的 cookie。这是通过将值设置为“已删除”并将到期时间设置为过去一年在内部实现的。
    • 因为设置值为 FALSE 的 cookie 会尝试删除 cookie,所以不应使用布尔值。相反,使用 0 表示 FALSE,使用 1 表示 TRUE。
    • Cookie 名称可以设置为数组名称,并且可以作为数组提供给您的 PHP 脚本,但单独的 cookie 存储在用户的系统中。考虑explode() 设置一个具有多个名称和值的cookie。不建议为此使用serialize(),因为它可能会导致安全漏洞。

    【讨论】:

    • 但是为什么在我第一次运行页面时它没有被打印出来。 {我的意思是在清除浏览器中的所有 cookie 之后}
    • @Stackerman,你绝对不能显示。这是 PHP 文档中提到的陷阱的第一点。
    • 投反对票的人请解释一下,以便我完善答案。
    • 您提供的来源解决了我的问题。 [链接]in3.php.net/set_cookie
    • 谢谢@Stackerman,但我不知道为什么这个答案被否决了。
    【解决方案2】:
    setcookie('test','one');
    

    会在响应的http头下面添加,用于让浏览器设置cookie。

    Set-Cookie: test=one ...
    


    如果cookie是在浏览器端设置的,那么下次访问该页面时,请求头会如下:
    Cookie: name=value; ...
    

    这个数据是用来设置超级全局$_COOKIE的,所以只有从第二次开始你才会看到这个值。

    第一次只告诉浏览器设置cookie,当时请求头中没有cookie数据,所以看不到值。

    【讨论】:

      【解决方案3】:

      您所做的是创建 Cookie 并将其打印在同一页面中,Cookie 无法打印在同一页面本身,因为它是用户加载下一页。您可以尝试在下一页打印 cookie。

        <?php
        echo $_COOKIE['test'];
        ?>
      

      您可以通过

      来存储Cookie
      $a=$_COOKIE['test'];
      

      将其存储在变量 $a 中的目的是即使未设置 cookie,cookie 的值也将保持不变,但 $a 的值不应更改。

      【讨论】:

        【解决方案4】:

        你的答案在于你的问题本身。
        此行:
        setcookie('test','one')--> 当您运行 index.php 时,cookie 由 PHP 脚本发送,并在您的浏览器中 SET 因此,您的 PHP 脚本将无法在它第一次运行时读取值,因为它只是设置您的 cookie。

        所以,只有在cookie被SET之后,当你第二次运行时,[由于cookie这次包含值]它是READ并由PHP打印脚本 希望把事情弄清楚

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-07-24
          • 1970-01-01
          • 2011-07-02
          • 2014-03-08
          • 2012-12-18
          • 1970-01-01
          • 1970-01-01
          • 2016-07-16
          相关资源
          最近更新 更多