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()" 相呼应。这一切都很好。


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


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


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


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


提前致谢。


心有法竹
浏览 168回答 2
2回答

子衿沉夜

在将响应发送回客户端(浏览器)之前,不会设置 cookie。直到客户端的下一个请求之后,它才在您的 PHP 中可用。你可以做下一步。<?php&nbsp; &nbsp; $cookie_set = isset($_COOKIE['time']);&nbsp; &nbsp; if (!$cookie_set && isset($_GET['submit']) {&nbsp; &nbsp; &nbsp; &nbsp; setcookie('time', date('Y/m/d H:i:s'), time() + 3600);&nbsp; &nbsp; &nbsp; &nbsp; $cookie_set = true;&nbsp; &nbsp; }&nbsp; &nbsp; if ($cookie_set) {&nbsp; &nbsp; &nbsp; &nbsp; echo '<body>';&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; echo '<body onload="toggleOverlay(0)">';&nbsp; &nbsp; }

jeck猫

我找到了一个半解决方案,如果提交页面,重新加载页面,然后在创建 cookie 后,我再次重新加载页面并更改 index.php?提交到 index.php像这样&nbsp;<?php&nbsp;&nbsp; &nbsp;if (isset($_GET["submit"])) {&nbsp; &nbsp; &nbsp;setcookie("time",date('Y/m/d H:i:s'),time()+3600);&nbsp; &nbsp; &nbsp;echo $_COOKIE["time"];&nbsp; &nbsp; &nbsp;header("Refresh:0; url=index.php");&nbsp; &nbsp;}&nbsp; &nbsp;//Look if cookie isset, if not open overlay.&nbsp; &nbsp;if (isset($_COOKIE["time"])) {&nbsp; &nbsp; &nbsp; echo "<body>";&nbsp; &nbsp;} else {&nbsp; &nbsp; &nbsp; echo "<body onload='toggleOverlay(0)'>";&nbsp; }?>像这样它可以工作,但它不是最好的解决方案。
打开App,查看更多内容
随时随地看视频慕课网APP