|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Inscription : octobre 2010 Messages : 5 ![]() |
Bonjour à tous,
J'utilise le système de session PHP pour gérer un espace admin. Pour cela, j'ai créé une classe en php toute simple qui me permet d'appeler mes fonctions en orienté objet. En gros donc, j'ai mon fichier classSession.inc (que je fais appel dès le début de la page test) puis j'initialise ma session par $Session = new mvSession(); (dans la fichier classSession, la fonction mvSession comporte la ligne suivante : @session_start(); ) Pour le reste, c'est pareil comme attribuer une variable à la session ouverte, je fais de ce style : $Session->SetValue('champ', 'valeur'); où SetValue équivaut en php à $_SESSION['champ'] = 'valeur';. Bref, en gros voilà. Ce système marchait très bien sur un autre hébergement et là, je le teste sur un nouveau site et BIP, ça ne marche. Le plus byzarre, c'est que ça me le fait aussi sur trois autres sites (sur 5). J'ai alors vérifié ce qu'il clochait et j'ai compris alors que la session ne me retournait pas la valeur de la variable alors que j'en ai attribué une (par ma fonction SetValue - voir plus haut). J'ignorais pourquoi ? J'ai fait des test et alors, j'ai remarqué qu'à chaque actualisation de la page, ma session me retournait un nouveau id de session que je récupère avec session_id. Cela prouve qu'il m'en créé une nouvelle à chaque fois. Est-ce ça ? Et pourquoi ? That is the question ! Merci de votre aide. Bien sûr, ce souci ne vient que si je fais appel à la classe "classSession.inc" que j'ai créé avec mes petites fonctions en orienté objet, en revanche, si je fais appel aux fonction de php pour la gestion des sessions directement sur mon fichier test, bingo, ça marche... Le fichier test se trouve à cette adresse : http://www.jeuxaxiii.fr/test/testsession.php Merci à tous pour votre aide. Amicalement. Greg005. Voici le bout de code tout simple La classe classSession.inc Code php :
et la page testsession.php Code html :
|
||||
|
|
00
|
|
|
#2 |
|
Membre émérite
![]() Alain Inscription : novembre 2005 Messages : 897 ![]() |
Salut
Testé tes codes et ils sont fonctionnels. Le fait de réactualiser 100 fois, n'écrase pas l'id de session de base par un autre. ( ?) Pas d'anomalie en vue, en tout cas dans les codes présentés. Es-tu certain qu'il n'y a pas d'autres fichiers ? [Edit] Ou bien celà provient de ton nouvel hébergement, car pas de soucis côté sources.
__________________
Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre. C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles. |
|
|
00
|
|
|
#3 | ||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 709 ![]() |
Salut
Code :
__construct() { ... } Tout comme pour le destructeur : __destruct() { ... } Ca fait partie des méthodes dites magiques. La doc Php : http://fr2.php.net/manual/fr/language.oop5.magic.php Ceci dit, il est autorisé d'utiliser le même nom de la classe, comme cela se fait dans d'autres langages, mais sans dire de bêtise, depuis la version de Php5.3, ça doit être __construct(). Vérifie la version de Php sur ton nouvel hébergeur, mais le plus simple c'est de mettre à jour ton code, car là, c'est plus du Php4 qui est de nos jour est dépassé Ceci fait que ça se peut que la méthode mvSession() (le constructeur) ne serait pas appelé, et par conséquent la session ne serait pas démarrée. D'ailleurs, en suivant ton lien, je n'obtiens pas de cookie, qui à mon avis confirmerait ça. Petit parenthèse au passage, les @ devant les fonctions ou autre ce n'est pas une bonne approche. Masquer les erreurs est tout sauf à faire, c'est un peu comme débrancher les organes de sécurités ou d'alertes sur des machines/outils/matériels. Bref, ne pas être au courant des erreurs est une erreur. Agit par exemple sur la directive display_error du php.ini. En résumant : En production on l'a met à Off -> aucun affichage des erreurs, mais il seront quand même dispo dans un fichier log. En développement à On -> On affiche les erreurs afin de s'aider à corriger les bogues. ![]() Ils font comment les gens qui ne sont pas sur Windows, comme les Linux, Mac, etc ... ? Utilise un jeu de caractère (encodage) bien plus standard qui touchera un maximum de personne, comme l'ISO-8859-15, UTF-8, etc ...
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
||
|
|
00
|
|
|
#4 | ||||
|
Invité de passage
![]() Inscription : octobre 2010 Messages : 5 ![]() |
Bonsoir à tous,
Merci pour votre aide et pardons de vous répondre que maintenant. Je viens de modifier le nom de mon constructeur (ça c'est fait) mais le beug persiste... Je vais mettre à jour le code. En enlevant le @ à la fonction session_start(), un problème s'est affiché, une idée : voici le lien http://www.jeuxaxiii.fr/test/testsession.php Une autre idée ? Pour ce qui est du jeu de caractère "windows-1252", c'est juste une page test, je travaille normalement avec "l'ISO-8859-15". Voici tous le code (et c'est bien tout le code) Code :
Code :
|
||||
|
|
00
|
|
|
#5 | |
![]() ![]() Inscription : juin 2003 Messages : 4 893 ![]() |
Citation:
http://php.developpez.com/faq/langag...s_already_sent
__________________
Modérateur PHP |
|
|
|
00
|
|
|
#6 |
|
Membre éclairé
![]() Ingénieur développement logiciels Inscription : mars 2007 Messages : 274 ![]() |
L'erreur se fait à la ligne 69 de ta classe.
Mais dans le code que tu nous as donné il n'y a pas de ligne 69, donc c'est possible que cela soit un espace (ou un autre caractère "invisible") qui traine après le tag fermant de PHP. Essaie d'enlever le tag fermant dans la classe. Ca évite ce genre de soucis. Et je confirme les @ c'est le mal devant les fonctions .
__________________
Smiley de Plomb 2009 Anciennement FrancoisIT |
|
|
10
|
|
|
#7 |
|
Invité de passage
![]() Inscription : octobre 2010 Messages : 5 ![]() |
MIRACLE !!!! En enlevant la balise , cela fonctionne !!!!
![]() Merci à vous tous et surtout à BornBanane pour m'avoir aidé à trouver la réponse à mon problème. Mais, je ne comprends pas comment cela peut marcher car normalement, j'ai ouvert en haut la balise PHP par mais je ne l'ai pas fermé (puisque je l'ai supprimée) dans la classe. Hors toute balise ouverte doit être fermée, non ? Une idée ? Merci encore.
|
|
|
00
|
|
|
#8 | |||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 709 ![]() |
Citation:
Php permet d'éviter de fermer la balise ?> pour tous fichiers Php (comme les classes, fonctions). Cependant, et comme en général un miracle s'explique difficilement, je te conseillerais que sur ce coup là, et bien sûr provisoirement, de remettre le code comme il était auparavant, donc avec la fermeture ?>, et de tenter de trouver où ce situais ce caractère indésirable. Histoire de bien comprendre pourquoi, et qui sait, d'éviter que ce soit l'arbre qui cache la forêt. Enfin, c'est un conseil. Ca aussi c'est obsolète, du code Php4. Depuis Php5 ça évolué, ce n'est plus var $une_propriete où les propriétés étaient toutes publiques, on a le choix de plusieurs déclarations/portées/visibilités différentes désormais : public, protected et private Code :
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|||
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Inscription : septembre 2010 Messages : 1 240 ![]() |
Pour ouvrir une session tu peux faire :
Ainsi, même si tu insère préalablement du code qui a ouvert une session, tu n'aura pas d'erreur.
__________________
- Réalisations - Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical. |
|
|
00
|
|
|
#10 |
|
Invité de passage
![]() Inscription : octobre 2010 Messages : 5 ![]() |
Ok, merci pour les réponses, je vais mettre tout ce joli code à jour.
|
|
|
00
|
|
|
#11 | |
|
Membre éclairé
![]() Ingénieur développement logiciels Inscription : mars 2007 Messages : 274 ![]() |
Perso cette astuce que je donne je l'avais lu sur la documentation de ZF.
Citation:
__________________
Smiley de Plomb 2009 Anciennement FrancoisIT |
|
|
|
00
|
|
|
#12 |
|
Membre Expert
![]() Inscription : janvier 2006 Messages : 951 ![]() |
personnellement je ne pense pas que session_start() soit bien placée dans un constructeur de classe.
C'est typiquement le genre d'objet que je sérialise (que je stocke dans $_SESSION quoi ) du coup, session_start() dans une méthode membre et static pour un appel explicite et le constructeur ne sera jamais appelé qu'une fois par visiteur (ou navigateur). ça demande de bien gérer le réveil de l'objet mais je trouve ça plus propre, en tout cas ça va vraiment bien avec le mécanisme d’auto-chargement des classes.
__________________
PHP fait nativement la validation d'adresse électronique Utilisez le bouton résolu! |
|
|
00
|
|
|
#13 | |
|
Membre Expert
![]() Inscription : septembre 2010 Messages : 1 240 ![]() |
Citation:
Mais par exemple une classe téléchargée sur le net peut avoir besoin pour fonctionner d'activer les sessions. Et pour qu'elle soit autonome il peut être utile d'avoir à le faire (quand on veut qu'elle soit utilisable directement par des "débutants"). C'est pour cette raison que est une solution souvent bien pratique.
__________________
- Réalisations - Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical. |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com