为了账号安全,请及时绑定邮箱和手机立即绑定

PHP cookie 设置后无法正常工作

PHP cookie 设置后无法正常工作

PHP
心有法竹 2023-03-04 10:47:33
我是 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 需要一些时间,到那时其他代码已经执行,但是有人知道如何解决这个问题吗?提前致谢。
查看完整描述

2 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

在将响应发送回客户端(浏览器)之前,不会设置 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)">';

    }


查看完整回答
反对 回复 2023-03-04
?
jeck猫

TA贡献1909条经验 获得超7个赞

我找到了一个半解决方案,如果提交页面,重新加载页面,然后在创建 cookie 后,我再次重新加载页面并更改 index.php?提交到 index.php


像这样


 <?php 

   if (isset($_GET["submit"])) {

     setcookie("time",date('Y/m/d H:i:s'),time()+3600);


     echo $_COOKIE["time"];


     header("Refresh:0; url=index.php");

   }


   //Look if cookie isset, if not open overlay.

   if (isset($_COOKIE["time"])) {

      echo "<body>";

   } else {

      echo "<body onload='toggleOverlay(0)'>";

  }

?>

像这样它可以工作,但它不是最好的解决方案。


查看完整回答
反对 回复 2023-03-04
  • 2 回答
  • 0 关注
  • 167 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号