Evangun
Messages postés1980Date d'inscriptiondimanche 20 février 2005StatutMembreDernière intervention24 septembre 2012
-
3 avril 2009 à 00:30
Evangun
Messages postés1980Date d'inscriptiondimanche 20 février 2005StatutMembreDernière intervention24 septembre 2012
-
3 avril 2009 à 00:59
Bonjour à tous,
j'ai un objet que je souhaite mettre en session sous forme sérialisée, mais le problème est le suivant :
$panier = unserialize($_SESSION['panier']);
//ici j'utilise mon objet panier qui marche bien
//je veux le mettre en session
$_SESSION['panier'] = serialize($panier);
//immédiatement après $panier n'est plus un objet, il a été sérialisé.
echo $panier; //affiche bien une chaîne
comme si $panier avait été passé par référence. D'après ce que j'ai lu, ça ne devrait pas être le cas ?? Pour info je ne pense pas faire de passage par référence dans ma classe et elle n'a pas les méthodes magiques _sleep et _wakeup.
Evangun
Messages postés1980Date d'inscriptiondimanche 20 février 2005StatutMembreDernière intervention24 septembre 20124 3 avril 2009 à 00:59
En fait on, c'est register_globals qui faisait planter mon script quand il était à on... j'imagine qu'à un moment ou à un autre, il devait confondre $panier et $_SESSION['panier'] mais je n'ai pas le courage de vérifier, j'y ai déjà passé trop de temps.
Merci quand même, bonne soirée
Evangun
Messages postés1980Date d'inscriptiondimanche 20 février 2005StatutMembreDernière intervention24 septembre 20124 3 avril 2009 à 00:44
Bon évidemment c'est toujours au moment où on pose la question après avoir cherché la réponse pendant 2 heures qu'on trouve...
Le souci venait du fait que pour mes tests, j'écrivais parfois :
session_start();
$_SESSION = array();
session_destroy();
if(isset($_SESSION['panier']))...
je croyais qu'au prochain rechargement de la page il n'y aurait pas de session existante vu qu'elle avait été détruite aussitôt par session_destroy, mais de toute évidence le fait d'appeler $_SESSION['panier'] sans avoir initialisé la session avant fait quand même planter quelque chose par la suite. En effet après ça, le fait de faire serialize($objet) transforme réellement $objet en chaine. Ce comportement est pour le moins étonnant
Pour régler le problème, quand je veux supprimer ma session, je fais maintenant : $_SESSION = array();
session_destroy();
exit;
pour être sûr qu'il n'y aura pas de traîneries derrière, et tout marche bien au prochain rechargement de page.
voilà, en espérant que ça servira aussi d'autres personnes ^^