Cookie没有设置但其余代码正在执行?

时间:2012-11-01 21:30:09

标签: php cookies error-handling

这真的令人困惑。我有两页,A& B.两者都使用以下代码:

 $row = mysqli_fetch_array($data);
     $_SESSION['user_id'] = $row['user_id'];
     $_SESSION['username'] = $row['username'];
     setcookie('user_id', $row['user_id'], time() + (60 * 60 * 24 * 30));    // expires in 30 days
      setcookie('username', $row['username'], time() + (60 * 60 * 24 * 30));  // expires in 30 days
      $home_url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/main.php';
      header('Location: ' . $home_url);

A将在设置标题后执行代码(为方便起见而删除),然后设置标题; B将在设置标题后执行代码,而不是设置标题。

我检查了NUMEROUS个答案,并且没有空格,main.php文件设置为正常,A& B文件看起来相同但在IF语句之前具有不同的内容。

没有出现错误;重定向(应该有标题设置并做出相应的反应就像你在B上注销一样(因此没有标题有效),而在A上则按预期显示。

设置cookie的两个代码块(在IF语句中)之间的唯一区别是IF语句根据代码出现之前的代码而不同。

根据A& A代码之间的差异,我应该注意哪些事情(如果有的话)。乙

(PS:我也知道没有设置标头,因为会话没有启动,通过在代码的末尾放置一个IF $ _SESSION ...。

1 个答案:

答案 0 :(得分:1)

session_start();
$row = mysqli_fetch_array($data);
$_SESSION['user_id'] = $row['user_id'];
$_SESSION['username'] = $row['username'];
setcookie('user_id', $row['user_id'], time() + (60 * 60 * 24 * 30));    // expires in 30 days
setcookie('username', $row['username'], time() + (60 * 60 * 24 * 30));  // expires in 30 days
$home_url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/main.php';
header('Location: ' . $home_url);
exit;