2013-06-23 81 views
0

我已經查看了我的問題的現有答案。類不保留受保護的值

我的權利,通過過程中回顯的價值和權利,直到在「標題(「位置」指令值保持不變。

我不認爲這是一個序列化問題,建議類似問題...

下面是類的相關位:

class clsSetUser { 
    protected $UserID = 0; 

    public function initUser($id) { 
    // get user details from database 

    $this->setUserID($id); 
    // etc... 
    } 

    private function setUserID($value) { $this->UserID = $value; } 
    public function getUserID() { return $this->UserID; } 
} 

的common.php:

if(unset($clsUser)) $clsUser = new clsSetUser; 

登錄-exec.php:

$clsUser->initUser($id); 

header("Location: somewhere.php"); 

somewhere.php:

echo $clsUser->getUserID(); 

// here it equals 0 

什麼想法? 「標題」序列化的一切?

回答

0

這是因爲PHP實際上是從somewhere.php的乾淨石板開始的。

header("Location: somewhere.php");發送命令瀏覽器連接到不同的頁面。在這個頁面中,前一頁的非變量在PHP中可用。

您需要設置$_SESSION中的userId,以便您可以在訪問somewhere.php時從數據庫中重新加載用戶。

登錄-exec.php

$clsUser->initUser($id); 
$_SESSION['user_id'] = $id; 
header("Location: somewhere.php"); 

somewhere.php

$clsUser->initUser($_SESSION['user_id']); 
+0

高爐 - 我曾希望避免使用$ _SESSION太多。每當我打開一個新頁面時,不斷點擊數據庫是不合邏輯的。感謝您的信息。 –

+0

爲什麼你想避免碰到用戶對象的數據庫? 如果用戶/會話表得到正確索引,獲取用戶對象將不會花費任何時間。否則,您可以嘗試將所需的用戶信息存儲在Cookie中,但隨後將在每個請求中將數據傳輸到服務器。這可能會增加頁面的加載時間。 – EWit

+0

這不僅僅是用戶對象,它是數據庫對象,以及不會改變和來自ini文件的各種值。這都是增加處理時間,應該只執行一次。我有一個非常大的應用程序,數百頁。我曾希望構建一個完整的面向對象系統,但顯然不是在PHP中,如果每次發出頭文件指令時類都被破壞,我不能這樣做...... –