2012-11-01 28 views
-1

這真是令人困惑。我有兩個頁面,A & B.兩者都使用下面的代碼:Cookie未被設置,但其餘代碼正在執行?

$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 & B ?

(PS:我也知道頭文件沒有被設置,因爲會話沒有啓動,通過在代碼末尾放置一個IF $ _SESSION ...

+0

你需要使用session_start();見http://www.tizag.com/phpT/phpsessions.php –

回答

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; 

+0

感謝您的答案;移動session_start()讓我注意到上面的代碼定義了一個if語句,該語句立即結束,從而關閉它內部的所有代碼.....雖然一些執行的事實仍然沒有迴避.... –