Mettre un objet dans une variable de session

Signaler
Messages postés
68
Date d'inscription
vendredi 21 janvier 2005
Statut
Membre
Dernière intervention
5 octobre 2009
-
 philippegui2 -
Bonjour, je voudrais enregistrer un objet dans une variable de session :
$panier = new Panier();
if(!isset($_SESSION['panier']))
    $_SESSION['panier'] = $panier;

echo $_SESSION['panier'] ->getId();

Et cela ne fonctionne pas, je voulais savoir si on pouvait passer des objet dans les variable de session, ou si il fallait faire autrement.

Merci.

2 réponses

Messages postés
182
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
22 octobre 2010

slt,

tu devrais serialiser ton objet avans de le stocker :

$panier = new Panier();
if(!isset($_SESSION['panier']))
    $_SESSION['panier'] = serialize($panier);

$temp = unserialize($_SESSION['panier']);
echo $remp->getId();

voila ;)
Messages postés
158
Date d'inscription
samedi 8 février 2003
Statut
Membre
Dernière intervention
17 juin 2010

Non, il n'est pas possible de passer un objet dans une variable de session.
Seul les variables de type simple (chainede caractère, entier, caractère, booléen) sont accepté.
L'astuce pour stocker un tableau ou un objet dans une variable de session est celle que t'as donné Renus02 :
Tu sérialise ton objet avant de le mettre en variable de session.
Et quand tu voudras l'utiliser, tu n'aura plus qu'à le désérialiser.

Un objet a une structure mémoire complexe avec des pointeurs dans tous les sens, ce qui ne lui permet pas d'être passer en variable de session.
Sérialiser un objet revient à concaténer les différentes propriétés de celui-ci pour qu'un seul pointeur ne soit utilisé pour le manipuler.
Désérialiser l'objet revient à reconstruire sa structure mémoire pour l'utiliser comme l'objet qu'il est.

Merci beaucoup, j'ai galérer plusieurs jours sur ce problème, avant de comprendre qu'un objet ne pouvais enter tout cru dans une variable de session, mais je veux bien ajouter qu'on peut stocker un Array() dans une variable de session sans sérialiser.