2011-11-26 25 views
5

Una vez que el usuario está autenticado, serialicé el objeto de clase y lo almacené en una sesión. Sin embargo, no puedo imprimir su salida incluso después de usar unserialize().

Creación de la variable de sesió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; 

Acceso desde una página diferente, no hay salida:

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

Esto funciona sin embargo, por lo que no hay nada de malo en mi clase. También estoy usando session_start() en ambas páginas. usuario

echo $_SESSION['username']; 

Clase:

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

Editar:

Ésta es mi 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

¿Usó 'session_start()' en todas sus páginas? ¿Y a qué se parece 'User()'? – mc10

+0

'$ _SESSION ['myObj'] = $ myObj' debería ser suficiente, creo - PHP debería manejar la serialización por usted. – lonesomeday

+0

@lonsesomeday También lo intenté, pero no funcionó. – user478636

Respuesta

7

página Inicial:

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

debería haber

$_SESSION['myObj'] = $myObj; 

Página siguiente:

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

debería ser

$myObj = $_SESSION['myObj']; 

Además, trate de declarar sus clases antes de su llamada a session_start().

+0

También arreglé este error. Pero aún no está funcionando. – user478636

+0

@ user478636 ¿Qué tal el código actualizado? – mc10

+0

intenta analizar con var_dump. ¿Alguna vez intentó var_dump ($ _ SESSION); ? – Marko

2

Su objeto no serializado se está deserializando como una instancia de __PHP_Incomplete_Class_Name porque no está incluyendo la definición de la clase de usuario antes de deserializarla. Ver Object Serialization. Debe incluir la definición de la clase User antes de tratar de deserializarla.