2011-11-26 77 views
5

一旦用戶通過身份驗證,我序列化類對象並將其存儲在會話中。不過,即使使用了unserialize()後,我也無法打印輸出。

創建會話變量:

if(!isset($_SESSION['myObj']) && empty($_SESSION['myObj'])) { 
$myObj = new User($row['user_id'], $row['username'], $row['user_level']); 
$_SESSION['username']= $myObj->usr_name; 
$s_Obj = serialize($myObj); 
$_SESSION['myObj'] = $s_Obj; 

從不同的頁面訪問,無輸出:

$sObj = $_SESSION['Obj']; 
$myObj = unserialize($s_Obj); 
echo $myObj->usr_name; 

然而這工作的,所以沒有什麼錯我的同班同學。我也在這兩個頁面中使用了session_start()

echo $_SESSION['username']; 

類用戶:

<?php 

class User{ 
    public $usr_id; 
    public $usr_name; 
    public $usr_level; 
    public $last_access_login; 

    public function __construct($id, $usr_name, $usr_level) { 
     $this->usr_id = $id; 
     $this->usr_name = $usr_name; 
     $this->usr_level = $usr_level; 
     $this->last_access_login = date("F d Y H:i:s.",time()); 
    } 
} 
?> 

編輯:

這是我vardump

array 
    'myObj' => 
    object(__PHP_Incomplete_Class)[1] 
     public '__PHP_Incomplete_Class_Name' => string 'User' (length=4) 
     public 'usr_id' => string '3' (length=1) 
     public 'usr_name' => string 'student' (length=7) 
     public 'usr_level' => string '3' (length=1) 
     public 'last_access_login' => string 'November 26 2011 20:12:38.' (length=26) 
    'url' => string '/researchportal/proposal' (length=24) 
+0

您是否在所有頁面上使用'session_start()'? 'User()'看起來像什麼? – mc10

+0

'$ _SESSION ['myObj'] = $ myObj'應該足夠了,我想 - PHP應該爲您處理序列化。 – lonesomeday

+0

@lonsesomeday我也試過,但它沒有工作。 – user478636

回答

7

Inital頁:

$s_Obj = serialize($myObj); 
$_SESSION['myObj'] = $s_Obj; 

應該

$_SESSION['myObj'] = $myObj; 

下一頁:

$sObj = $_SESSION['Obj']; 
$myObj = unserialize($s_Obj); 

應該

$myObj = $_SESSION['myObj']; 

此外,儘量您的來電session_start()之前聲明你的類。

+0

我也修復了這個錯誤。但它仍然沒有工作。 – user478636

+0

@ user478636更新的代碼如何? – mc10

+0

嘗試使用var_dump進行分析。你有沒有試過var_dump($ _ SESSION); ? – Marko

2

您的反序列化對象正在作爲__PHP_Incomplete_Class_Name的實例進行反序列化,因爲您在反序列化之前未包含User類的定義。見Object Serialization。在嘗試反序列化之前,您必須包含User類的定義。