【问题标题】:PHP, cookie not being recognised as "set" when it is setPHP,cookie在设置时未被识别为“设置”
【发布时间】:2015-07-27 04:56:03
【问题描述】:

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

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

<?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>

有人能解释一下为什么第一个示例代码不起作用,而第二个示例代码起作用吗?

非常感谢

【问题讨论】:

  • 您确定该用户每次通过 GET 检索到的变量都相同吗?即用户第一次、第二次和第三次访问该页面时的url是什么?
  • 通过 GET 得到的变量可能每次都不一样。我想让它创建一个新的 cookie,如果该 cookie 不存在,如果具有变量名称的 cookie 已经存在,做一些事情......
  • 请查看我更新的答案。希望你现在能明白你的第一个 sn-p 中发生了什么。

标签: javascript php cookies


【解决方案1】:

仔细查看这部分代码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 是你的代码文件)。

【讨论】:

  • 首先使用 GET 请求发送变量值是什么意思?可以举个例子吗?
  • 请查看我更新的答案。希望你现在明白你的第一个 sn-p 中发生了什么。
猜你喜欢
  • 2018-08-23
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-27
相关资源
最近更新 更多