首页 > 解决方案 > PHP cookie 设置后无法正常工作

问题描述

我是 cookie 的新手,并试图搜索我的问题,但找不到。

我的代码:

索引.php

<?php 
   if (isset($_GET["submit"])) {
       setcookie("time",date('Y/m/d H:i:s'),time()+3600);

       echo $_COOKIE["time"];
   }

   //Look if cookie isset, if not open overlay.
   if (isset($_COOKIE["time"])) {
      echo "<body>";
   } else {
       echo "<body onload='toggleOverlay(0)'>";
    }
?>

当您在浏览器中打开页面时,执行了 php 代码的底部部分,不应该有 cookie 'time',因此主体将与 onload="toggleoverlay()" 相呼应。这一切都很好。

然后当我点击提交按钮接受cookies时,页面重新加载,我的php代码的上半部分被执行,一个名为'time'的cookie被创建为当前时间。

然后应该执行底部部分,但它仍然与 onload 呼应主体,即使我刚刚创建了 cookie。

当我尝试回显 cookie 时,我也会收到错误消息(说 cookie 不存在)。当我再次手动重新加载页面时,它可以工作。但这非常令人沮丧,因为您需要接受 cookie。然后页面被重新加载,覆盖再次打开。

我认为这是因为创建 cookie 需要一些时间,然后其他代码已经执行,但是有人知道如何解决这个问题吗?

提前致谢。

标签: phpcookies

解决方案


在将响应发送回客户端(浏览器)之前,不会设置 cookie。它在您的 PHP 中不可用,直到之后来自客户端的下一个请求。

你可以做下一个。

<?php
    $cookie_set = isset($_COOKIE['time']);

    if (!$cookie_set && isset($_GET['submit']) {
        setcookie('time', date('Y/m/d H:i:s'), time() + 3600);
        $cookie_set = true;
    }

    if ($cookie_set) {
        echo '<body>';
    } else {
        echo '<body onload="toggleOverlay(0)">';
    }

推荐阅读