[php] session : pb utilisation avec des "objets"

session : pb utilisation avec des "objets" [php] - PHP - Programmation

Marsh Posté le 29-03-2003 à 15:03:22    

j'aimerais mettre des objets en session :
 
malheureusement ca marche avec des type "simple", mais pas avec des object :
 

Code :
  1. <?php
  2. session_start();
  3. if (!isset($_SESSION['count'])) {
  4.     $_SESSION['count'] = 0;
  5.     echo "hello";
  6. }
  7. $count = &$_SESSION['count'];
  8. $count++;
  9. echo $count;
  10. ?>


 

Code :
  1. <?php
  2. session_start();
  3. if (!isset($_SESSION['count'])) {
  4.     $_SESSION['count'] = new Compteur();
  5.     echo "hello";
  6. }
  7. $count = &$_SESSION['count'];
  8. $count->inc();
  9. $count->see();
  10. ?>


 
 
 
j'ai l'impression que quadn on mets un object en session :  
isset => renvoie false tout le temps :(

Reply

Marsh Posté le 29-03-2003 à 15:03:22   

Reply

Marsh Posté le 29-03-2003 à 15:08:11    

peut etre avec serialize() et unserialize()

Reply

Marsh Posté le 29-03-2003 à 15:13:26    

non, je crois pas... ca s'étant avant register_global off et track_vars on

Reply

Marsh Posté le 29-03-2003 à 15:18:25    

Code :
  1. <?php
  2.   session_start();
  3.   if (!isset($_SESSION['count'])) {
  4.         $_SESSION['count'] = 0;
  5.         echo "hello";
  6.   } 
  7.  
  8.   $_SESSION['count']++;
  9.   echo $_SESSION['count'];
  10.   ?>
  11.   <?php
  12.   session_start();
  13.   if (!isset($_SESSION['count'])) {
  14.         $_SESSION['count'] = new Compteur();
  15.         echo "hello";
  16.   } 
  17.  
  18. $_SESSION['count']->inc();
  19. $_SESSION['count']->see();
  20.   ?>


 
non ?

Reply

Marsh Posté le 29-03-2003 à 15:18:46    

pb résolu :
dans le cas d'un type simple : isSet
dnas le cas d'un objet :   is_object  
!

Reply

Marsh Posté le 29-03-2003 à 15:19:56    

beleg > ce qeu tu marque c'est kif kif:
& == obtenir une référence sur l'objet de la session !

Reply

Marsh Posté le 29-03-2003 à 15:26:29    

je sais, c bien pour ca que je vois pas linteret de créer une variable $count pour agir sur $_SESSION["count"]

Reply

Marsh Posté le 29-03-2003 à 15:32:26    

non, c simpelment plus facil de manipuler $count que $_SESSION['count']
 
 
.....
en fait, je me suis planté : ca résoud pas mon problème !!
 
en fait, le session_start() ne réccupère pas les objets que je met dans le table $_SESSION[] !! je capte pas !

Reply

Marsh Posté le 29-03-2003 à 16:17:35    

je viens de regarder un fichier session ...  
c de la forme : NOM | TYPE : LONGUEUR : VALEUR;  
 
je suppose quil ne doit pas savoir comment sauvegarder ton objet, il faudrait le convertir dans un type symple genre array
 
edit : si il le sauve ... donc il doit pouvoir le recuperer .. test en cours.
 
 
jai sauvé ds $_SESSION["membre"] une instance de member
je recupere :  
__PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class_Name] => member [login] => yo [idmember] => 5 [idunique] => e69cbb8a06a7558e076c6c0162190d0e [idonline] => 446 [admin] => 2 )


Message édité par beleg le 29-03-2003 à 16:22:06
Reply

Marsh Posté le 29-03-2003 à 16:26:43    

en, fait, le pb ne doit pas venir de la:
 
l'exemple marche bien tel qu'il est.
mais ca se comporte tres bizarrement quand  
on essaye de garder en session une instance Class A et que cette class A contient un champs qui est une instannce d'une classe B.
des lors, la session ne garde pu l'instance de A

Reply

Marsh Posté le 29-03-2003 à 16:26:43   

Reply

Marsh Posté le 29-03-2003 à 16:31:47    

Code :
  1. if (!is_object($_SESSION['userobj'])){
  2.   $_SESSION['userobj']= new user();
  3.   //ps : dans le constructeur $this->countPost=0;
  4. }
  5. $user= $_SESSION['userobj'];
  6. echo $user->getPost(); //return $this->countPost;
  7. $user->IncPost(); //=$this->countPost++;
  8. //comme l'objet a été modifié, il faut le ressauver
  9. $_SESSION['userobj']= $user;


 
chez moi ça fct toujours...


---------------
...oups kernel error...
Reply

Marsh Posté le 29-03-2003 à 16:33:05    

moi jai fait comme ca pr recuperer mon objet du coup
 
// sauvegarde
//$_SESSION["membre"] = serialize($M);  
 
// recuperation
$MM = unserialize($_SESSION["membre"]);
print_r($MM);
 
echo "<br><br>".$MM->login;  
echo "<br><br>".$MM->idunique;
 
jai pas de classe sous la main comportant des objets, je peux pas aller plus loin ds le test

Reply

Marsh Posté le 29-03-2003 à 16:37:04    

le pb est c'est qu'il n'a pas l'air de vouloir mettre en session un objec,t quand celui ci contient deja un objet!
 
 
 
j'essaye de te faire un exemple php

Reply

Marsh Posté le 29-03-2003 à 16:40:48    

tu veux direq'un user qui a un objet caddy par ex, tu sais récupérer l'user, mais pas le caddy ?
$user= new user();
$user->caddy->addArticle('test',3);
ça c'est pas possible de le sauver dans une session ?
$_SESSION['user']= $user;  
$user2= $_SESSION['user'];
$user2->caddy->afficher(); //ne fonctionnerait pas ?


---------------
...oups kernel error...
Reply

Marsh Posté le 29-03-2003 à 16:41:03    

ethernal a écrit :

Code :
  1. if (!is_object($_SESSION['userobj'])){
  2.   $_SESSION['userobj']= new user();
  3.   //ps : dans le constructeur $this->countPost=0;
  4. }
  5. $user= $_SESSION['userobj'];
  6. echo $user->getPost(); //return $this->countPost;
  7. $user->IncPost(); //=$this->countPost++;
  8. //comme l'objet a été modifié, il faut le ressauver
  9. $_SESSION['userobj']= $user;


 
chez moi ça fct toujours...


 
 :hello: , bah pas chez moi, mais ca va pas mempecher de sortir  :) , on recherche un nouveau dev php :whistle:  mais tjrs pas de php de tres haut niveau technique ... 2 ans de dev de personnes dorigine diverses, c chaud a ratrapper  :D , c un bordel  
 
 [:psywalk]

Reply

Marsh Posté le 29-03-2003 à 16:45:09    

beleg a écrit :


 
 :hello: , bah pas chez moi, mais ca va pas mempecher de sortir  :) , on recherche un nouveau dev php :whistle:  mais tjrs pas de php de tres haut niveau technique ... 2 ans de dev de personnes dorigine diverses, c chaud a ratrapper  :D , c un bordel  


 [:pom2ping] heu... ils engagerait qq en homework à 400km de leur boite ?? :D
:lol: fo imposer tes points de vues ;)


---------------
...oups kernel error...
Reply

Marsh Posté le 29-03-2003 à 16:50:41    

arggggggh,  
je viens de trouver le bug,  
ca vient de la methode __sleep !!
 
 
je sais pas pkoi, mais ca chie cette méthode!!!!
 
 
 

Code :
  1. <?php
  2. Class B{
  3. var $b;
  4. function __sleep( ) { return 0; }
  5. }
  6. Class A{
  7. var $mon_b;
  8. function A() { $this->mon_b = new B(); }
  9. }
  10. session_start();
  11. echo "en session now : <br>";
  12. foreach( $_SESSION as $x => $y) echo "$x => $y <br>";
  13. echo "=====================<br>";
  14. // Utilisez $HTTP_SESSION_VARS avec PHP 4.0.6 ou plus ancien
  15. if (!isset($_SESSION['mon_a'])) {
  16.     $_SESSION['mon_a'] = new A();
  17.     echo "je rajoute une instance de A en session !!!!<br>";
  18. }
  19. echo "en session now : <br>";
  20. foreach( $_SESSION as $x => $y) echo "$x => $y <br>";
  21. echo "=====================<br>";
  22. ?>

Reply

Marsh Posté le 29-03-2003 à 16:55:22    

notre developpeuse/chef est au canada  :D , c super pratique pr les explications ... mais je doute quil te prenne pr rester chez toi  :lol: .
 
tjrs en periode dessai, je fais des commentaires mais pas a tout le monde , profil bas.


Message édité par beleg le 29-03-2003 à 16:56:05
Reply

Marsh Posté le 29-03-2003 à 17:56:16    

beleg a écrit :

je doute quil te prenne pr rester chez toi  :lol: .


dommage  :sweat:


---------------
...oups kernel error...
Reply

Marsh Posté le 29-03-2003 à 17:57:54    

__sleep pour les objets, c'est pas une fonciton réservée ??
 
j'ai vu ça qq part, mais où ?? :(
 
-- edit--
http://www.php.net/manual/en/function.serialize.php
ok j'ai rien dit  [:tuffgong]  


Message édité par ethernal le 29-03-2003 à 19:27:26

---------------
...oups kernel error...
Reply

Marsh Posté le 29-03-2003 à 18:02:14    

bah si c'est une fonction reservé, elle est appellée avant la serialisation !
 
mais si elle existe, le but est de l'utilisr, enfin, bon, c pas grave, j'ai pas besoin de cette fonction en ce moment

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed