Page 1 sur 1

limitation dans le passage d'objet avec $_SESSION?

Posté : 21 nov. 2006, 15:04
par Ausecour
Salut tout le monde, j'ai un problème de sauvegarde de données via une class, dans une variable $_SESSION.

En gros j'utilise un class, qui utilise une autre class dans sa struture.

voila la version extra light de mon code, juste pour expliquer le principe:

class Resident{
  
    
    //class suivi
    var $Monsuivi;
    
    function __construct(){
      
      $this->Monsuivi = new Suivi();
      
   
    
    }

// differentes fonction
}

////////ma class contenu dans la premiere

class Suivi{
  
  var $idevenement;
  
  Function __construct(){

    $this->idevenement = "2";
   
   
  }

 Function ChargeDataSuivi($id){

     $this->idevenement = $id;

 }

}


/////page1.php

if (premiere passage){

 $_SESSION['resident']->Monsuivi->ChargeDataSuivi(10);

 $_SESSION['suiviseul']->ChargeDataSuivi(10);
 
// si je l'affiche j'ai bien ma valeur pour resident
 echo $_SESSION['resident']->Monsuivi->idevenement; //là c'a marche je trouve 10

// si je l'affiche j'ai bien ma valeur pour suivi
 echo $_SESSION['suiviseul']->idevenement; //là marche aussi je trouve 10
}

if(2emme passage par un formulaire dans mon cas){

  // là c'a marche plus, c'a affiche '2' la valeur du construteur
  echo $_SESSION['resident']->Monsuivi->idevenement; 

 //alors que là c'a marche bien, je retrouve ma valeur 10!!
 echo $_SESSION['suiviseul']->idevenement; 

}


J'avoue que j'en perd mon 'php', ya t il une limitation dans l'imbrication des class à passer dans une variable de session? Ou est-ce que j'accede mal à ma valeur dans ma class resident??? Au secour je pete un plomb!!

Merci :shock:

Posté : 21 nov. 2006, 16:00
par Ajoloca
Bonjour,

Pour utiliser des classes (plus tôt des objets) avec les sessions:

1 - Sérialiser l'objet avant l'affectation.
2 - La page réceptrice doit connaître la (les) class
3 - "Deserialiser" la variable session avant l'utilisation

Un exemple:
page1.php
session_start();
include_once('MyClassLib.php');
$maClass = new MaClass();
$maClass->valeur = $valeur;
$_SESSION['ma_class'] = serialize($maClass);
header('Location: page2.php');
page2.php
session_start();
include_once('MyClassLib.php');
$maClass = unserialize($_SESSION['ma_class']);
echo $maClass->valeur;
Et il n'y a pas de limitation dans le nombre "d'imbrications"

EDIT :
J'avais oublier de préciser le besoin d'avoir en début de chaque page (même si elle n'utilise pas les sessions) la directive 'session_start()'

bien vu

Posté : 21 nov. 2006, 16:30
par xsasiela
Bien joué, c'a a bien l'air d'être cela. Je pensais que dans php5 la serialization se faisait par défaut, et comme je n'avais pas de problèmes sur les objets simple, je pensais que c'etait vrai,... mais en fait non.

Un grand merci!! :wink:

faudrait le mettre en résolu!!

Posté : 21 nov. 2006, 16:33
par xsasiela
Faudrait le mettre en résolu celui-là, mais je m'etait connecté en invité pour créer le message, et je peux pas modifier!!

Posté : 21 nov. 2006, 16:34
par Ajoloca
Re,
Un gentil Modérateur le fera pour toi.

Posté : 21 nov. 2006, 16:41
par zeus
C'est fait ;)

Argh!!!!

Posté : 21 nov. 2006, 17:48
par xsasiela
Bon, ben en fait j'ai trouvé ce qui me faisait cet effet bizarre: un javascript qui me recharger la page 'mere' pour rafraichir l'affichage à la validation => et me reinitialisait la classe derriere, d'ou cet arrachage de cheveu!!

Donc la fonction serialize n'etait pas en cause dans mon cas (marchait dans 1 cas et pas l'autre c'etait bizarre), et dans php5 par defaut la serialization se fait bien automatiquement, voila...!!! merci :P

Posté : 21 nov. 2006, 17:54
par Ajoloca
Re,

J'ai eu des cas (changement de version de système) qui m'ont suffisamant fait galérer pour te conseiller même si ça se fait par défaut, de le faire explicitement.
"On est jamais aussi bien servi que par soi-même", j'approuve !.