8791 sujets

Développement web côté serveur, CMS

Bonjour

j'ai voulu stocker des résultats récupérés avec simple_xml dans des variables de session.
Exemple
$_SESSION['resultat'] = $parsed->toto;
Après avoir fait ça, j'ai eu le message d'erreur suivant
Warning: session_start() [function.session-start]: Node no longer exists in C:\Program Files\Wamp\www\etc... on line 2
J'ai pu résoudre mon problème en procédant de la sorte:
$_SESSION['resultat'] = (string) $parsed->toto;

Mais j'ai tout de même 2 questions:
[B]1. Pourquoi $_SESSION ne fait pas bon ménage avec simple_xml?

2. A quoi sert cet attribut (string) devant ma variable?[/B]

merci d'avance pour vos lumières
Modifié par BuddyMan (15 Oct 2007 - 05:37)
Salut,

Pour passer un objet en variable de session je te conseille de la serializer
(http://ch2.php.net/serialize).

Le (string) avant ta variable c'est ce qu'on appel un cast, c'est à dire que tu transformes volontairement la variable dans le type annoncé entre parenthèse.

A+
Bonjour,

1. Pourquoi $_SESSION ne fait pas bon ménage avec simple_xml?
Apparement les éléments simpleXML ne sont pas sérializés correctement et donc font planter la session.
Je penses que ceci pourrait marcher en conservant un objet:
$_SESSION['resultat'] = $parsed->asXML();
// autre fichier
$parsed = new SimpleXMLElement($_SESSION['resultat']);


2. A quoi sert cet attribut (string) devant ma variable?
Il va transformer le noeud "toto" en chaine de caractère à la volée. Dans la session tu n'aura alors plus un objet mais seulement la valeur du noeud.

Si ta seconde solution marche (si tu n'as pas besoins d'avoir un objet simpleXML après) alors conserve-la elle est plus rapide car elle évite de recréer un objet à chaque page.