2011-11-26 22 views
5

Sau khi người dùng được xác thực, tôi đã tuần tự hóa đối tượng lớp và lưu trữ nó trong một phiên. Tuy nhiên, tôi không thể dường như in đầu ra của nó ngay cả sau khi sử dụng unserialize().

Tạo biến phiên:

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; 

Truy cập từ một trang khác, không có đầu ra:

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

này hoạt động tuy nhiên, vì vậy không có gì sai với lớp học của tôi là. Tôi cũng đang sử dụng session_start() trong cả hai trang. sử dụng

echo $_SESSION['username']; 

Class:

<?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()); 
    } 
} 
?> 

Edit:

Đây là vardump tôi

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

Bạn có sử dụng 'session_start()' trên tất cả các trang của mình không? Và 'User()' trông như thế nào? – mc10

+0

'$ _SESSION ['myObj'] = $ myObj' là đủ, tôi nghĩ - PHP nên xử lý việc tuần tự hóa cho bạn. – lonesomeday

+0

@lonsesomeday Tôi cũng đã thử điều đó, nhưng nó không hoạt động. – user478636

Trả lời

7

trang inital:

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

nên

$_SESSION['myObj'] = $myObj; 

Trang tiếp theo:

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

nên

$myObj = $_SESSION['myObj']; 

Bên cạnh đó, hãy thử khai báo các lớp học của bạn trước khi cuộc gọi của bạn để session_start().

+0

Tôi cũng sửa lỗi này. Nhưng nó vẫn không hoạt động. – user478636

+0

@ user478636 Làm thế nào về mã được cập nhật? – mc10

+0

cố gắng phân tích bằng var_dump. Bạn đã từng thử var_dump ($ _ SESSION) chưa; ? – Marko

2

Đối tượng unserialized của bạn đang được unserialized như là một thể hiện của __PHP_Incomplete_Class_Name bởi vì bạn không bao gồm định nghĩa của lớp người dùng trước khi unserializing nó. Xem Object Serialization. Bạn phải bao gồm định nghĩa của lớp User trước khi bạn cố gắng unserialize nó.

Các vấn đề liên quan