Can I store a class instance in a $_SESSION space?

 Class User{

public $id;
public $username;
public $password;
public $email;
public $steam;
public $donator;
public $active;

public function __construct($username, $email, $password, $id, $active, $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.

Here is Solutions:

We have many solutions to this problem, But we recommend you to use the first solution because it is tested & true solution that will 100% work for you.

Solution 1

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.

Solution 2

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.

Solution 3

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

Solution 4

$_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.

Note: Use and implement solution 1 because this method fully tested our system.
Thank you 🙂

All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply