Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/06/2008, 10h34   #1
Invité de passage
 
Inscription : janvier 2006
Messages : 19
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 19
Points : 1
Points : 1
Par défaut Session objet et héritage

Bonjour

Problème de session...
Au commencement j'avais ça :

fichier : megaclass.php
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
class megaClass
{
  function __construct()
  {
     //code
  }
 
   //d'autres methodes
 
  function putinSession($cname)
  {
    $_SESSION['objetsession'] = $this;
  }
}
?>
fichier : class2.php
Code :
1
2
3
4
5
6
7
8
9
10
11
12
<?php
class class2 extends megaClass
{
  function __construct()
  {
     parent:: __construct();
     //code
  }
 
   //d'autres methodes
}
?>
fichier : index.php
Code :
1
2
3
4
5
6
7
8
<?php
 
require megaclass.php
require class2.php
 
$class = new class2();
$class->putinSession();
?>
Donc voilà en gros (je pense que ca suffit comme code pour comprendre le pb). Tout fonctionnait, c'était merveilleux, je pouvais récupérer mon objet dans les autres pages sans problème, tout était ok.
Mais j'ai decidé de faire une autre classe heritant de class2.
Donc :
fichier quifaitdeconner.php
Code :
1
2
3
4
5
6
7
8
9
10
11
12
<?php
class quiFaitDeconner extends class2
{
  function __construct()
  {
    parent:: __construct();
    //code
  }
 
   //d'autres methodes
}
?>
et le fichier index.php modifié :
fichier : index.php
Code :
1
2
3
4
5
6
7
8
9
<?php
 
require megaclass.php
require class2.php
require quifaitdeconner.php
 
$class = new quiFaitDeconner ();
$class->putinSession();
?>
Et là ... dramatiquement, ça ne fonctionne plus. Si j'affiche la variable session contenant mon objet juste après l'avoir mis en session, pas de soucis, c'est ok. Mais dès que je veux le récupérer sur un autre pas ça déconne et il me met : "__PHP_Incomplete_Class Object".
Et si je déclare un nouvel objet class2, j'ai pas d'erreur.

Je me suis dit qu'il y avait un problème avec le session_start, mais comme ca fonctionnait avant je ne vois pas pourquoi ça ne fonctionnerait plus. J'ai regardé l'auto.start du php.ini, pas de soucis, il est a 0.
Enfin voilà, je ne comprends pas pourquoi ça marchait avant et plus maintenant.
Ou bien au niveau du constructeur ?

Bref si quelqu'un a une moindre petit idée, je sus preneur.
Merci !
Maurice Fallou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2008, 13h28   #2
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
Aucun probleme chez moi, testé en PHP 5.2.1 et PHP 4.3.10.

Le code ci dessous fonctionne parfaitement :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php
session_start();
 
if (isset($_GET['get'])) {
	var_dump($_SESSION['objetsession']);
}
 
if (isset($_GET['set'])) {
	$class = new quiFaitDeconner ();
	$class->putinSession();
}
 
if (isset($_GET['clear'])) {
	session_destroy();
	$_SESSION=array();
	session_start();
}
 
class otherClass {
 
}
 
class megaClass
{
  var $otherClass;
  function __construct()
  {
     //code
	 $otherClass = new OtherClass();
  }
 
   //d'autres methodes
 
  function putinSession()
  {
    $_SESSION['objetsession'] = $this;
  }
}
 
class class2 extends megaClass
{
  function __construct()
  {
     parent:: __construct();
     //code
  }
 
   //d'autres methodes
}
 
 
class quiFaitDeconner extends class2
{
  function __construct()
  {
    parent:: __construct();
    //code
  }
 
   //d'autres methodes
}
 
?>
 
<br>
<a href="?clear">clear</a><br>
<a href="?get">get</a><br>
<a href="?set">set</a><br>
La seule différence c'est que je n'ai pas plusieurs fichiers, tout est au meme endroit.
Vérifie donc que tu as bien fait TOUT les require necessaires (les 3 classes) AVANT de chercher a récuperer quoi que ce soit (voir meme avant le session_start(), va savoir) je ne vois pas d'ou ca peut venir a part ca.
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2008, 14h20   #3
Invité de passage
 
Inscription : janvier 2006
Messages : 19
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 19
Points : 1
Points : 1
Oki,

Voui, ça doit pas être grand chose, un truc vraiment à la con qui m'a échappé.
J'étais pas là la fin de la semaine donc pas eu le temps de chercher, mais je vais aussi essayer de mettre un session_destroy comme tu as fait.

Merci pour ta réponse et les indices de recherche.
Maurice Fallou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2008, 15h06   #4
Invité de passage
 
Inscription : janvier 2006
Messages : 19
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 19
Points : 1
Points : 1
hum... ok je suis ridicule.

Après ce que tu m'as dit j'ai essayé de mettre toutes les classes dans le même fichier, et donc de faire appel uniquement à ce seul fichier... Et là il m'a mit une erreur "Cannot redeclare class blah blah", et c'est là que j'ai compris que j'avais oublié que je faisais appel ces classes ailleurs. Et donc j'avais oublié d'ajouter un require cet endroit....
Je sais pas si j'ai été clair, mais en gros c'est juste que j'avais oublié d'inclure le fichier dans un script.

Bon et bien merci, et désolé de t'avoir fait perdre du temps !
Maurice Fallou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2008, 15h30   #5
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
pas de probleme, et ca ne m'a pas pris trop de temps, juste un peu de copier/coller ;o)
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h54.


 
 
 
 
Partenaires

Hébergement Web