PHP, la serialization et les classes

OTHER Error: [2] unserialize() expects parameter 1 to be string, object given
Voici l’erreur que nous avons eu sur notre site pendant un bon moment, sans réussir à la résoudre.
Il s’agit d’un formulaire de souscription banal, en plusieurs étapes, avec à chaque fois des validations nécessaires. A chaque étape, notre objet « contrat » est serializé puis enregistré dans une variable de session, que nous déserializons un peu plus loin et ainsi de suite…
Jusque là, rien de bien compliqué, c’est comme ca que marche PHP… Cependant, cette erreur est apparue… Mais uniquement sur le serveur de production, pas en environnement de développement.
Nous nous sommes donc penché sur le php.ini allant même jusqu’à comparer les fichiers ligne par ligne. la première solution que nous avons trouvé était de désérializer sur TOUTES les pages (y compris les vues donc…). Un problème se posait lorsque le client quittait l’espace de souscription… Nous n’allions tout de même pas déserializer la variable sur tout notre site…
A trop vouloir fixer des règles, on en oubli parfois le principal. On m’avait appris « Quand tu utilises les sessions, commence par le session_start()« . Très bien… On m’aurait expliqué ce que cette fonction réalisait réellement, je n’aurai peut être pas eu ce problème…
En effet, pour que la déserialization se passe correctement, il faut que lorsque la session est initialisée sur chaque page (donc le fameux session_start()), elle ait connaissance de la classe. Il faut donc inclure les classes AVANT le session_start(). Tout fonctionne très bien maintenant… (En passant, la fonction serialize() ne sert plus à rien. On peut directement écrire $_SESSION[‘****’] = $objet;)

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.