2011-11-26 11 views
5

Po uwierzytelnieniu użytkownika serializowałem obiekt klasy i zapisywałem go w sesji. Jednak nie mogę wydrukować jego wydruków nawet po użyciu metody unserialize().

Tworzenie zmiennej sesji:

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; 

Dostęp od innej strony, nie ma wyjścia:

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

Działa to jednak, więc nie ma nic złego w mojej klasie. Używam również session_start() na obu stronach. użytkownik

echo $_SESSION['username']; 

Klasa:

<?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:

To mój 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

Użyłeś 'session_start()' na wszystkich swoich stronach? A jak wygląda "User()"? – mc10

+0

'$ _SESSION ['myObj'] = $ myObj' powinno wystarczyć, myślę, że PHP powinno obsługiwać serializację. – lonesomeday

+0

@lonsesomeday Próbowałem również, ale nie działało. – user478636

Odpowiedz

7

inital strony:

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

powinny być

$_SESSION['myObj'] = $myObj; 

Następna strona:

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

powinny być

$myObj = $_SESSION['myObj']; 

Ponadto, spróbuj deklarując swoje zajęcia przed wywołaniem session_start().

+0

Naprawiłem również ten błąd. Ale wciąż nie działa. – user478636

+0

@ user478636 Co powiesz na zaktualizowany kod? – mc10

+0

spróbuj przeanalizować za pomocą var_dump. Czy kiedykolwiek próbowałeś var_dump ($ _ SESSION); ? – Marko

2

Twój niezserializowany obiekt jest nieprywalizowany jako instancja o numerze __PHP_Incomplete_Class_Name, ponieważ nie definiuje się klasy użytkownika przed jej zdeserializowaniem. Zobacz Object Serialization. Musisz dołączyć definicję klasy User, zanim spróbujesz ją zdyspergować.

Powiązane problemy