Class User{
public $id;
public $username;
public $password;
public $email;
public $steam;
public $donator;
public $active;
public function __construct($username, $email, $password, $id, $acti开发者_如何学Cve, $donator, $steam){
$this->id = $id;
$this->username = $username;
$this->password = $password;
$this->email = $email;
$this->steam = $steam;
$this->donator = $donator;
$this->active = $active;
}}
is my class (simplified)
the following is my code:
$_SESSION['loggedIn'] = $user;
$user is a class instance of User
now this is what print_r($_SESSION['loggedIn']) shows me:
__PHP_Incomplete_Class Object
(
[__PHP_Incomplete_Class_Name] => User
[id] => 22
[username] => xxxx
[password] => xxxx
[email] => xxxx
[steam] => 1234567
[donator] => 0
[active] => 1
)
in which xxxx are values that are correct.
but when i try to retrieve data from my session. like so: "$_SESSION['loggedIn']->username" it returns a null value to me.
You must first serialize the object in to a string:
$_SESSION['user'] = serialize($user);
and:
$user = unserialize($_SESSION['user']);
Just make sure that the class is first defined before unserializing the object.
You can store objects in $_SESSION
. PHP will serialize them for you. Just make sure the class is defined before calling session_start
, or that it can be autoloaded. The reason the value stored in the session has type "__PHP_Incomplete_Class_Name" is that the User class wasn't defined when the object was unserialized during session loading (as explained in the PHP manual page on object serialization).
Resources can't be serialized. If you ever store an object that uses resources, implement __sleep
and __wakeup
to customize the serialization. PHP's serialization should be able handle all other types, even if they contain circular references.
While on the same page, the session
variable acts like just another vairable, so you can do with it what you want. THat's why you can store the object while still on that page.
Retrieving it later will actually show if it is fit for a session
, which it is not in your case.
If you really need to save that object, you could try and save it as a serialized object, and unserialize it after retrieval. That should work, although I don't know if this is the best sollution / design. Passing objects around like this might be considered a bit...anti-pattern
$_SESSION
variables seem to be only able to store arrays, numbers, and strings.
They cannot store a class object after you change to a new page.
精彩评论