Problème de serialization - passage par référence ? [Résolu]

Signaler
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
-
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
-
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.

Merci de votre aide :)

2 réponses

Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
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
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
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 ^^