【问题标题】:function not setting cookie till after the index runs直到索引运行后函数才设置cookie
【发布时间】:2013-06-25 09:36:13
【问题描述】:

所以我有一个用于几个不同页面的 php 函数。为了减少代码,我做了functions.php页面被调用。

所以我的索引调用functionX,并在该函数中设置cookie。但是我在 IF 语句中有这个函数,它似乎设置了 cookie,但直到索引上的所有代码都运行为止......

这里是一个示例代码。代码应该返回“whatever”,但它返回 null

index.php:

 require_once('functions.php');
 $cookie = ''; //just doing this to assume the cookie is always null.

 if ($cookie == '') {
    functionX();
$cookie = $_COOKIE['cookie']['random'];
 }

 echo ''.$cookie; //returns null.......

functions.php:

 function functionX() {
 $randomvar = 'whatever';
 setcookie("cookie[random]", $randomvar, time()+60*60*24*30, "/", "www.myweburl.com", 0, true);
 }

现在我认为它会在继续之前运行整个函数,但似乎不是这样......

【问题讨论】:

    标签: php function return


    【解决方案1】:

    如果您查看setcookie() docu,您会注意到句子Once the cookies have been set, they can be accessed on the next page loadsetcookie() defines a cookie to be sent along with the rest of the HTTP headers,并且因此您设置的cookie 尚未在当前会话中设置。

    您可以做的是修改保存 cookie 的全局数组,使它们似乎出现在当前会话中。基本上如下方式:

    function functionX() {
      $randomvar = 'whatever';
      setcookie("cookie[random]", $randomvar, time()+60*60*24*30, "/", "www.myweburl.com", 0, true);
      $_COOKIE['cookie']['random'] = $randomvar;
    }
    

    【讨论】:

      【解决方案2】:

      $_COOKIE 是在处理您的代码之前创建的,就像 $_POST 和 $_GET 一样。如果您在页面加载后启动 cookie,它将为空。你可以这样做:

      $cookie = functionX('random');
      
      function functionX($key) {
         if(isset($_COOKIE['cookie'][$key]) {
             return $_COOKIE['cookie'][$key];
         } else {
             $randomvar = 'whatever';
             setcookie("cookie[$key]", $randomvar, time()+60*60*24*30, "/", "www.myweburl.com", 0, true);
             return $randomvar;
         }
      }
      

      【讨论】:

        猜你喜欢
        • 2014-03-22
        • 2021-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-16
        • 2016-12-23
        相关资源
        最近更新 更多