2011-08-26 58 views
0

我有一個創建一個新的登錄類的index.php頁面(登錄類完成所有數據的處理,建立會話,重定向等)問題與登錄PHP腳本 - 傳遞對象通過會話

指數.PHP我創建了一個新的登錄類

require_once('login.class.php'); 
    $login = new Login; 

登錄構造看起來像這樣

public function __construct(){ 
    // Start session and open a database connection 
    session_start(); 
    $this->connectToDB(); 
} 

如果用戶登錄成功,我重定向他securePage.php。

,如果我這樣做對securePage.php

$test = $_SESSION ['usrData']; 
var_export($test->getFirstName()); 
var_export($test->getLastName()); 
var_export($test->isAuthorized()); 

下它會顯示以下錯誤

Fatal error: Call to a member function getFirstName() on a non-object in /login/securePage.php on line 17

然而,當我把

$login = new Login; 

var_export($test->getFirstName()); 
var_export($test->getLastName()); 
var_export($test->isAuthorized()); 

它的工作原理!我不」知道是什麼給了,如果我做錯了什麼,因爲即使當我把

session_start(); 

,而不是

$login = new Login; 

,但它仍然給我的錯誤

Fatal error: Call to a member function getFirstName() on a non-object in /login/securePage.php on line 16

+0

var_export($ login);'?的結果是什麼? – xdazz

回答

0

我認爲它與變量名有關。如果我沒有錯,在你的securePage中。PHP的,這裏是代碼:

$login = $_SESSION ['usrData']; 
var_export($login); 
var_export($test->getFirstName()); 

它應該是:

$login = $_SESSION ['usrData']; 
var_export($login); 
var_export($login->getFirstName()); 

希望它能幫助。

+0

廢話!你是對的!通過我所做的所有測試,我完全搞糟了var_exports中的變量名。除了構造函數中的session_start()。其他代碼在OOP設計方面如何? – CodeCrack

+0

雖然我不是OOP方面的專家。但是,從我所看到和了解的OOP中,我認爲你的設計對我來說看起來很好。但是,也許一些面向對象的專家可以幫助你更多地瞭解這一點。 =) – nero

1

可能是幾件事:

- 你必須在使用會話的任何頁面頂部執行session_start()。

- 使用序列化對象(存儲在會話變量中的對象),對象類需要包含在引用的任何位置。

看起來更可能是你沒有session_start()?

另外資源變量(數據庫句柄,文件句柄等)將不會在會話變量發生的序列化/反序列化中倖免於難。

+0

我確實在頁面頂部有session_start,但它仍然給出相同的錯誤。 – CodeCrack

+0

我現在還添加了完整的源代碼,請查看它。 – CodeCrack

+0

你不應該在你的對象的構造函數中做一個session_start()。這只是要求麻煩。 – gview

0

在發佈重定向之前關閉會話是一種很好的做法(儘管我希望在瀏覽器請求新頁面之前不會寫入會話)。

該行'var_export($ login);'在securePage.php中生成? (註釋導致致命錯誤的調用)。