函数在索引运行之后才设置cookie

时间:2013-06-27 18:31:42

标签: php function return

所以我有一个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);
 }

现在我认为它会在继续之前贯穿整个功能,但它似乎不是那样......

2 个答案:

答案 0 :(得分:0)

在处理代码之前创建

$_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;
   }
}

答案 1 :(得分:0)

如果您查看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未在当前会话中设置。

该功能是打算的。< / p>

你可以做的是修改持有cookie的全局数组,使它们似乎出现在当前会话中。基本上有以下几种方式:

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