2011-11-26 25 views
5

Una volta che l'utente è autenticato, ho serializzato l'oggetto classe e l'ho memorizzato in una sessione. Tuttavia, non riesco a stampare il suo output anche dopo aver usato unserialize().

Creazione della variabile di sessione:

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; 

accesso da una pagina diversa, nessuna uscita:

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

Questo funziona però, quindi non c'è niente di sbagliato con la mia classe. Sto anche usando session_start() in entrambe le pagine. utente

echo $_SESSION['username']; 

Classe:

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

Questo è il mio 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

Hai usato 'session_start()' in tutte le tue pagine? E come appare 'User()'? – mc10

+0

'$ _SESSION ['myObj'] = $ myObj' dovrebbe essere sufficiente, penso - PHP dovrebbe gestire la serializzazione per te. – lonesomeday

+0

@lonsesomeday Ho provato anche questo, ma non ha funzionato. – user478636

risposta

7

pagina inital:

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

dovrebbe essere

$_SESSION['myObj'] = $myObj; 

Pagina seguente:

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

dovrebbe essere

$myObj = $_SESSION['myObj']; 

Inoltre, provare a dichiarare le vostre classi prima della chiamata a session_start().

+0

Ho anche corretto questo errore. Ma ancora non funziona. – user478636

+0

@ user478636 Come circa il codice aggiornato? – mc10

+0

prova ad analizzare con var_dump. Hai mai provato a var_dump ($ _ SESSION); ? – Marko

2

L'oggetto non graduato viene non serializzato come istanza di __PHP_Incomplete_Class_Name perché non si include la definizione della classe Utente prima di non serializzarlo. Vedi Object Serialization. È necessario includere la definizione della classe User prima di provare a non serializzarla.