J'ai en ce moment une legere incompréhension quand au fonctionnement des
sessions...
Je suis en train de programmer un jeu en PHP5. J'utilise quatre classes:
database (avec un design pattern de singleton, qui sert à la connection
à la base de données, et un __destruct() qui contient juste
mysql_close($this->dbLink) ), user qui me sers à gerer toutes les
informations des utilisateurs, et qui dans son __destruct() met à jour
toutes les informations modifiées, maison qui sert simplement à lister
les pieces d'une maison quelquonque et piece qui gere une piece en
particulier et les actions de l'utilisateur dans cette piece, avec une
fonction __destruct() pour mettre à jour les informations sur la piece.
Jusqu'ici, tout marche. Seulement, là où j'ai le probleme, c'est à ce
niveau: je stoque dans une variable de session le numéro de la maison où
se trouve l'utilisateur à la fin du script, comme ceci:
Si je rajoute echo $_SESSION['maison']; avant le ?>, il m'indique
effectivement la valeure de $idMaison. Mais lorsque je change de page
(la fonction redir affiche une avec une balise meta
http-equiv="refresh"), j'ai ce code:
<?php
session_start();
echo $_SESSION['maison'];
?>
et là, le echo me renvoi ceci:
#Object ID 1
Et je ne comprends pas tout à fait pourquoi est-ce que la valeure
change... Sachant que j'ai bien sur verifié et qu'il n'ai fait aucune
allusion à une quelquonque utilisation de $_SESSION dans le __destruct()
de mes classes :s
Aussi, si quelqu'un pouvait m'indiquer de quel coté je dois orienter mes
recherches pour resoudre ce probleme, je lui en serait grandement
reconnaissant.
Par contre, j'ai remarqué quelque chose: si au lieu de stoquer la variable $idMaison dans $_SESSION['maison'], je la stoque dans $_SESSION['house'] (par exemple), tout marche.
Donc, est-il possible que ce probleme soit en fait du à un bug dans la gestion de destruction de classes? Puisqu'il n'y à qu'une instance de la classe maison, se pourrait-il que le #Object ID 1 soit une reference à cette classe maison, qui aurait pour une raison mysterieuse été stoquée dans la variable de session du même nom? Cela est-il lié au fait que cette classe n'a pas de fonction __destruct() surchargée?
En effet, comme je l'ai dit, le reste de ma session fonctionne toujours: l'identifiant de l'utilisateur, qui passe lui aussi par une session, ainsi que la piece dans laquelle il se trouve (variable $_SESSION['piece'], donc variable du nom d'une classe avec surcharge de la fonction __destruct()) sont parfaitement passée et ne posent pas de problemes.
Donc voila, ce n'est pas un probleme plus longtemps puisqu'il est résolu en changeant le nom de la clé dans le tableau de session, mais j'avoue que je m'interroge...
Bonne soirée,
Aramiil
loufoque wrote:
PIQUET Yann a dit le 13/09/2005 09:25:
Mais lorsque je change de page (la fonction redir affiche une avec une
balise meta http-equiv="refresh")
Ta fonction redir ne transmet pas l'id de session.
Et pourtant, les autres variables de la session sont toujours
présentes... Voici la fonction redir:
Par contre, j'ai remarqué quelque chose: si au lieu de stoquer la
variable $idMaison dans $_SESSION['maison'], je la stoque dans
$_SESSION['house'] (par exemple), tout marche.
Donc, est-il possible que ce probleme soit en fait du à un bug dans la
gestion de destruction de classes? Puisqu'il n'y à qu'une instance de la
classe maison, se pourrait-il que le #Object ID 1 soit une reference à
cette classe maison, qui aurait pour une raison mysterieuse été stoquée
dans la variable de session du même nom? Cela est-il lié au fait que
cette classe n'a pas de fonction __destruct() surchargée?
En effet, comme je l'ai dit, le reste de ma session fonctionne toujours:
l'identifiant de l'utilisateur, qui passe lui aussi par une session,
ainsi que la piece dans laquelle il se trouve (variable
$_SESSION['piece'], donc variable du nom d'une classe avec surcharge de
la fonction __destruct()) sont parfaitement passée et ne posent pas de
problemes.
Donc voila, ce n'est pas un probleme plus longtemps puisqu'il est résolu
en changeant le nom de la clé dans le tableau de session, mais j'avoue
que je m'interroge...
Par contre, j'ai remarqué quelque chose: si au lieu de stoquer la variable $idMaison dans $_SESSION['maison'], je la stoque dans $_SESSION['house'] (par exemple), tout marche.
Donc, est-il possible que ce probleme soit en fait du à un bug dans la gestion de destruction de classes? Puisqu'il n'y à qu'une instance de la classe maison, se pourrait-il que le #Object ID 1 soit une reference à cette classe maison, qui aurait pour une raison mysterieuse été stoquée dans la variable de session du même nom? Cela est-il lié au fait que cette classe n'a pas de fonction __destruct() surchargée?
En effet, comme je l'ai dit, le reste de ma session fonctionne toujours: l'identifiant de l'utilisateur, qui passe lui aussi par une session, ainsi que la piece dans laquelle il se trouve (variable $_SESSION['piece'], donc variable du nom d'une classe avec surcharge de la fonction __destruct()) sont parfaitement passée et ne posent pas de problemes.
Donc voila, ce n'est pas un probleme plus longtemps puisqu'il est résolu en changeant le nom de la clé dans le tableau de session, mais j'avoue que je m'interroge...
Bonne soirée,
Aramiil
loufoque
PIQUET Yann a dit le 14/09/2005 à 00:44:
Par contre, j'ai remarqué quelque chose: si au lieu de stoquer la variable $idMaison dans $_SESSION['maison'], je la stoque dans $_SESSION['house'] (par exemple), tout marche.
Sûrement un problème lié à register_globals dans ce cas.
PIQUET Yann a dit le 14/09/2005 à 00:44:
Par contre, j'ai remarqué quelque chose: si au lieu de stoquer la
variable $idMaison dans $_SESSION['maison'], je la stoque dans
$_SESSION['house'] (par exemple), tout marche.
Sûrement un problème lié à register_globals dans ce cas.
Par contre, j'ai remarqué quelque chose: si au lieu de stoquer la variable $idMaison dans $_SESSION['maison'], je la stoque dans $_SESSION['house'] (par exemple), tout marche.
Sûrement un problème lié à register_globals dans ce cas.
PIQUET Yann
loufoque wrote:
PIQUET Yann a dit le 14/09/2005 à 00:44:
Par contre, j'ai remarqué quelque chose: si au lieu de stoquer la variable $idMaison dans $_SESSION['maison'], je la stoque dans $_SESSION['house'] (par exemple), tout marche.
Sûrement un problème lié à register_globals dans ce cas.
register_globals est à off dans le php.ini, et je n'utilise aucune methode du type ini_set pour le mettre à on:
;[...] variables_order = "EGPCS"
;[...] register_globals = Off
;[...] register_long_arrays = On
loufoque wrote:
PIQUET Yann a dit le 14/09/2005 à 00:44:
Par contre, j'ai remarqué quelque chose: si au lieu de stoquer la
variable $idMaison dans $_SESSION['maison'], je la stoque dans
$_SESSION['house'] (par exemple), tout marche.
Sûrement un problème lié à register_globals dans ce cas.
register_globals est à off dans le php.ini, et je n'utilise aucune
methode du type ini_set pour le mettre à on:
Par contre, j'ai remarqué quelque chose: si au lieu de stoquer la variable $idMaison dans $_SESSION['maison'], je la stoque dans $_SESSION['house'] (par exemple), tout marche.
Sûrement un problème lié à register_globals dans ce cas.
register_globals est à off dans le php.ini, et je n'utilise aucune methode du type ini_set pour le mettre à on:
;[...] variables_order = "EGPCS"
;[...] register_globals = Off
;[...] register_long_arrays = On
Yann PIQUET
PIQUET Yann wrote:
loufoque wrote:
PIQUET Yann a dit le 14/09/2005 à 00:44:
Par contre, j'ai remarqué quelque chose: si au lieu de stoquer la variable $idMaison dans $_SESSION['maison'], je la stoque dans $_SESSION['house'] (par exemple), tout marche.
Sûrement un problème lié à register_globals dans ce cas.
register_globals est à off dans le php.ini, et je n'utilise aucune methode du type ini_set pour le mettre à on:
;[...] variables_order = "EGPCS"
;[...] register_globals = Off
;[...] register_long_arrays = On
Bonjour,
Je me permet de faire remonter ce sujet, j'aimerais vraiment comprendre la raison de ce comportement assez étrange de PHP... Si quelqu'un à une idée du pourquoi de ce remplacement de classe...
Merci d'avance
Aramiil
PIQUET Yann wrote:
loufoque wrote:
PIQUET Yann a dit le 14/09/2005 à 00:44:
Par contre, j'ai remarqué quelque chose: si au lieu de stoquer la
variable $idMaison dans $_SESSION['maison'], je la stoque dans
$_SESSION['house'] (par exemple), tout marche.
Sûrement un problème lié à register_globals dans ce cas.
register_globals est à off dans le php.ini, et je n'utilise aucune
methode du type ini_set pour le mettre à on:
;[...]
variables_order = "EGPCS"
;[...]
register_globals = Off
;[...]
register_long_arrays = On
Bonjour,
Je me permet de faire remonter ce sujet, j'aimerais vraiment comprendre
la raison de ce comportement assez étrange de PHP... Si quelqu'un à une
idée du pourquoi de ce remplacement de classe...
Par contre, j'ai remarqué quelque chose: si au lieu de stoquer la variable $idMaison dans $_SESSION['maison'], je la stoque dans $_SESSION['house'] (par exemple), tout marche.
Sûrement un problème lié à register_globals dans ce cas.
register_globals est à off dans le php.ini, et je n'utilise aucune methode du type ini_set pour le mettre à on:
;[...] variables_order = "EGPCS"
;[...] register_globals = Off
;[...] register_long_arrays = On
Bonjour,
Je me permet de faire remonter ce sujet, j'aimerais vraiment comprendre la raison de ce comportement assez étrange de PHP... Si quelqu'un à une idée du pourquoi de ce remplacement de classe...