0

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

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

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

索引.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.......

函数.php:

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

现在我认为它会在继续之前贯穿整个功能,但似乎并非如此......

4

2 回答 2

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;
   }
}
于 2013-06-27T18:37:54.627 回答
0

如果您查看setcookie() 文档,您会注意到该功能,您会注意到这些句子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;
}
于 2013-06-27T18:40:37.037 回答