PHP,cookie在设置时未被识别为“set”

时间:2015-07-27 04:56:04

标签: javascript php cookies

我有一个cookie,用于识别用户是否是第一次打开页面。我有它,所以当它第一次,如果它尚未设置,则设置一个cookie。每次用户在第二次或第三次尝试时加载页面时,代码都会检查cookie是否已设置并执行某些操作。

但是,由于某些原因在第二页加载时,代码找不到cookie,即使它是在我的Chrome浏览器中创建的

<?php 

 $canvas_id = $_GET["canvas_id"];

 if (!isset($_COOKIE[$canvas_id]))
  {
    setcookie($canvas_id, "NO", time()+3600, '/'); 

  } 

  else
  {
    //do something...
  } ?>



  <!DOCTYPE HTML> 
  <html>
  <body>

  <?php

   if (isset($_COOKIE[$canvas_id]))
   {     
      echo ("HELLO");
    }

   ?>
</body>
</html>

我拥有它,以便创建的cookie从前一页传递。我已经尝试将cookie值更改为硬编码变量,但它确实有效。例如:

    <?php 



 if (!isset($_COOKIE["test"]))
  {
    setcookie("test", "NO", time()+3600, '/'); 

  } 

  else
  {
    //do something...
  } ?>



  <!DOCTYPE HTML> 
  <html>
  <body>

  <?php

   if (isset($_COOKIE["test"]))
   {     
      echo ("HELLO");
    }

   ?>
</body>
</html>

有人可以解释为什么第一个示例代码不起作用,但第二个代码不起作用吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

仔细查看代码的这一部分if (!isset($_COOKIE[$canvas_id]))。 您提供的变量是$_COOKIE全局数组的键。如果您未设置$_GET["canvas_id"]的值,则变量$canvas_id的值将为空,!isset()将始终返回true并执行setcookie($canvas_id, "NO", time()+3600, '/');部分。

if (isset($_COOKIE[$canvas_id])){echo ("HELLO");}部分永远不会被执行,因为$_COOKIE[$canvas_id]未设置。

因此,如果您想要正确执行代码,则必须运行不含$_GET['canvas_id']值的代码,然后运行值$_GET['canvas_id']

像这样:

没有$_GET['canvar_id']值链接将是: http://localhost/cookie.php

$_GET['canvar_id']值链接将为:http://localhost/cookie.php?canvar_id=1234

(cookie.php是您的代码文件)。