Mettre un objet dans une variable de session

adakick Messages postés 68 Date d'inscription vendredi 21 janvier 2005 Statut Membre Dernière intervention 5 octobre 2009 - 27 nov. 2006 à 20:48
 philippegui2 - 7 mars 2018 à 10:50
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

Renus02 Messages postés 182 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 22 octobre 2010
27 nov. 2006 à 21:57
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 ;)
0
huberdine Messages postés 158 Date d'inscription samedi 8 février 2003 Statut Membre Dernière intervention 17 juin 2010
27 nov. 2006 à 23:05
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.
0
philippegui2
7 mars 2018 à 10:50
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.
0
Rejoignez-nous