limitation dans le passage d'objet avec $_SESSION?

Ausecour
Invité n'ayant pas de compte PHPfrance

21 nov. 2006, 15:04

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:

ViPHP
ViPHP | 1961 Messages

21 nov. 2006, 16:00

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()'
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Petit nouveau ! | 3 Messages

21 nov. 2006, 16:30

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:

Petit nouveau ! | 3 Messages

21 nov. 2006, 16:33

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!!

ViPHP
ViPHP | 1961 Messages

21 nov. 2006, 16:34

Re,
Un gentil Modérateur le fera pour toi.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

21 nov. 2006, 16:41

C'est fait ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Petit nouveau ! | 3 Messages

21 nov. 2006, 17:48

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

ViPHP
ViPHP | 1961 Messages

21 nov. 2006, 17:54

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 !.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein