Variable de session invisible

Variable de session invisible - PHP - Programmation

Marsh Posté le 03-11-2003 à 15:09:06    

Je viens de tenter d'installer un clone de Php Nuke,
 
   Mais de gros problèmes interviennent lorsque jelance les fichiers PHP. Résolu à comprendre le problème, je crée les 2 scripts suivants:
 

Citation :

wam.php
<?php
 session_start();
 $_SESSION['name'] = "Wam";
?>
<html><body>
<a href="./admin.php">Lien vers la page pour afficher les variables de session</a>
</body></html>


 

Citation :

admin.php
<?php
 session_start();
 if (isset($_SESSION['name'])) {
  echo($_SESSION['name']);
 }
 else {
  echo("Alors ca c'est ballot..." );
 }
 echo($_SESSION['name']);
 $_SESSION['test'] = "Babylone";
 echo($_SESSION['test']);
?>


 
Lorsque je lance wam.php, et que je click sur le lien vers admin.php qui sert donc à afficher la variable de session 'name', j'obtiens cela:
 

Alors ca c'est ballot...
Notice: Undefined index: name in d:\www\test\admin.php on line 9
Babylone


 
   J'utilise Apache 1.3.29, PHP 4.3.3 et register_globals off. Je sais que les problemes de session sont monnaie courante chez les gens qui debutent, et j'ai déjà regardé maintes et maintes fois mon code, et comparé avec des recherches sur google. Mais j'avoue que je ne vois pas d'erreur flagrante. Un regard exterieur sera le bienvenu :). Le problème viendrait il d'une erreur de configuration de mon serveur local? Merci d'avance à tous.


Message édité par stolenkiss le 03-11-2003 à 15:10:22
Reply

Marsh Posté le 03-11-2003 à 15:09:06   

Reply

Marsh Posté le 03-11-2003 à 16:14:06    

J'ai fait un copier/coller de ton code et ça marche chez moi (Apache 1.3.28 - PHP 4.3.3 - register_globals off)...

Reply

Marsh Posté le 03-11-2003 à 16:16:14    

Une idée qui me traverse la tete => tu as regarde le log d'Apache? A tous les coups tu as une erreur liée aux sessions. Sous windows tu dois changer la valeur de session.save_path sinon Apache peut pas creer les fichiers de session...

Reply

Marsh Posté le 03-11-2003 à 16:31:53    

Le log d'Apache ne me donne pas d'erreur relative a ce probleme. Juste un favicon.ico absent sur une page que j'avais testee. En ce qui concerne le session.save_path il pointe bien vers un repertoire  SessionData que j'ai créé. J'avoue que je suis perplexe devant ce probleme :(
 
Stolenkiss

Reply

Marsh Posté le 03-11-2003 à 16:37:48    

Hum... c'est louche effectivement. :/

Reply

Marsh Posté le 03-11-2003 à 16:47:35    

T'as regarde dans ton repertoire SessionData pour verifier si le fichier de session est créé et si il n'est pas vide?
 
EDIT : tu es sous win ou linux au fait (peut etre un pb de permission sous linux...)?


Message édité par impulse le 03-11-2003 à 16:52:18
Reply

Marsh Posté le 03-11-2003 à 17:45:41    

Je suis sous windows :)
 
   J'ai encore regarde et j'ai un peu avance: jepense avoir trouve d'ou vient le probleme. Lorsque j'arrive sur la premiere page (celle qui enregistre mes donnees de session), un fichier de session est bien créé dans mon repertoire session data. Tout est donc normal. En l'ouvrant je retrouve bien les info que je voulais enregistrer.
 
   En clickantsur le lien j'arrive sur la deuxieme page, et un nouveau fichier de session est créé! Saperlipopette: les erreurs sont toujours apparentes... en fait c'est comme si la session qui avait été ouverte précédemment était ignorée, et leserveur cherche alors les info que je lui demande dans le nouveau fichier de session... qui bien evidemment ne contient rien...
 
   Si je modifie le lien d'une page à une autre de manière à rajouter l'id de session afin d'obtenir ceci:
 
   <a href="./admin.php?<?=SID?>">Lien vers la page pour afficher les variables de session</a>
 
   Le  serveur se comporte comme si session.use_trans_sid est activé: la session est retrouvée et tout marche (mes données s'affichent). Hors chez moi, session.use_trans_sid est bel et bien desactivé!!! :(
 
   Le problème semble bien venir de la configuration... mais je ne vois pas trop comment le régler.
 
Stolenkiss

Reply

Marsh Posté le 03-11-2003 à 17:50:23    

euh question idiote...
 
   Vous bossez bien avec session.use_trans_sid = 0 ? (C'estsurtout ta réponse qui m'interesse Impulse ;) Merci d'avance).
 
Stolenkiss

Reply

Marsh Posté le 03-11-2003 à 17:58:54    

Stolenkiss a écrit :

Le log d'Apache ne me donne pas d'erreur relative a ce probleme. Juste un favicon.ico absent sur une page que j'avais testee.

regarde les logs d'erreurs, pas logs d'acces ;)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 03-11-2003 à 18:04:57    

C'est bien dans le log d'erreur ;)
 
   Je n'ai pas ouvert le log d'acces.
 
Stolenkiss

Reply

Marsh Posté le 03-11-2003 à 18:04:57   

Reply

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

Eh ben à mon humble avis, c'est simplement un problème d'acceptation des cookies par le navigateur que tu utilises !
 
Ca mérite en tous les cas d'être vérifié...

Reply

Marsh Posté le 03-11-2003 à 19:41:51    

Mon navigateur accepte justement tous les cookies...
 
   Le niveau de séurité est au mini. J'ai l'impression que ca vient de la config PHP. L'ID de session n'est pas transmis d'une page à une autre. Résultat, le serveur attribue un nouveau SID a chaquefoisque je fais session_start dans mon script PHP.
 
Stolenkiss

Reply

Marsh Posté le 04-11-2003 à 08:11:31    

Citation :

euh question idiote...
 
  Vous bossez bien avec session.use_trans_sid = 0 ? (C'estsurtout ta réponse qui m'interesse Impulse ;) Merci d'avance).
 
Stolenkiss


 
Oui, session.use_trans_sid = 0 chez moi.
Sinon, t'as essayé le script avec quels browsers (je suis a court d'idées...)?

Reply

Marsh Posté le 04-11-2003 à 08:15:22    

Voici mon php.ini (seulement la section [Session]), peut etre que ça pourra t'aider...
 

Code :
  1. [Session]
  2. ; Handler used to store/retrieve data.
  3. session.save_handler = files
  4. ; Argument passed to save_handler.  In the case of files, this is the path
  5. ; where data files are stored. Note: Windows users have to change this
  6. ; variable in order to use PHP's session functions.
  7. session.save_path = D:\tmp
  8. ; Whether to use cookies.
  9. session.use_cookies = 1
  10. ; This option enables administrators to make their users invulnerable to
  11. ; attacks which involve passing session ids in URLs; defaults to 0.
  12. ; session.use_only_cookies = 1
  13. ; Name of the session (used as cookie name).
  14. session.name = PHPSESSID
  15. ; Initialize session on request startup.
  16. session.auto_start = 0
  17. ; Lifetime in seconds of cookie or, if 0, until browser is restarted.
  18. session.cookie_lifetime = 0
  19. ; The path for which the cookie is valid.
  20. session.cookie_path = /
  21. ; The domain for which the cookie is valid.
  22. session.cookie_domain =
  23. ; Handler used to serialize data.  php is the standard serializer of PHP.
  24. session.serialize_handler = php
  25. ; Define the probability that the 'garbage collection' process is started
  26. ; on every session initialization.
  27. ; The probability is calculated by using gc_probability/gc_divisor,
  28. ; e.g. 1/100 means there is a 1% chance that the GC process starts
  29. ; on each request.
  30. session.gc_probability = 1
  31. session.gc_divisor     = 1000
  32. ; After this number of seconds, stored data will be seen as 'garbage' and
  33. ; cleaned up by the garbage collection process.
  34. session.gc_maxlifetime = 1440
  35. ; PHP 4.2 and less have an undocumented feature/bug that allows you to
  36. ; to initialize a session variable in the global scope, albeit register_globals
  37. ; is disabled.  PHP 4.3 and later will warn you, if this feature is used.
  38. ; You can disable the feature and the warning seperately. At this time,
  39. ; the warning is only displayed, if bug_compat_42 is enabled.
  40. session.bug_compat_42 = 0
  41. session.bug_compat_warn = 1
  42. ; Check HTTP Referer to invalidate externally stored URLs containing ids.
  43. ; HTTP_REFERER has to contain this substring for the session to be
  44. ; considered as valid.
  45. session.referer_check =
  46. ; How many bytes to read from the file.
  47. session.entropy_length = 0
  48. ; Specified here to create the session id.
  49. session.entropy_file =
  50. ;session.entropy_length = 16
  51. ;session.entropy_file = /dev/urandom
  52. ; Set to {nocache,private,public,} to determine HTTP caching aspects.
  53. ; or leave this empty to avoid sending anti-caching headers.
  54. session.cache_limiter = nocache
  55. ; Document expires after n minutes.
  56. session.cache_expire = 180
  57. ; trans sid support is disabled by default.
  58. ; Use of trans sid may risk your users security.
  59. ; Use this option with caution.
  60. ; - User may send URL contains active session ID
  61. ;   to other person via. email/irc/etc.
  62. ; - URL that contains active session ID may be stored
  63. ;   in publically accessible computer.
  64. ; - User may access your site with the same session ID
  65. ;   always using URL stored in browser's history or bookmarks.
  66. session.use_trans_sid = 0
  67. ; The URL rewriter will look for URLs in a defined set of HTML tags.
  68. ; form/fieldset are special; if you include them here, the rewriter will
  69. ; add a hidden <input> field with the info which is otherwise appended
  70. ; to URLs.  If you want XHTML conformity, remove the form entry.
  71. ; Note that all valid entries require a "=", even if no value follows.
  72. url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"


 
Note : j'utilise ce serveur sur une machine de dev, la configuration n'est surement pas optimale et/ou sécurisée mais en tt cas ton script fonctionne dessus sans aucune modification...


Message édité par impulse le 04-11-2003 à 08:16:01
Reply

Marsh Posté le 04-11-2003 à 08:17:02    

Autant pour moi et les cookies, ça m'avait fait une chose similaire à ton problème sur un navigateur que je testais. (d'ailleurs tu as essayé avec plusieurs browsers ?)
 
Sinon dans un php.ini avec lequel j'ai des sessions fonctionnelles, on a
 
session.save_handler=files
session.use_cookies=on
session.save_path=le path qui va bien
session.use_only_cookies=Off
session.use_trans_sid=Off
session.auto_start=off
 
Si ceux là sont ok on pourra voir la suite (mais je vois pas pourquoi ils seraient faux, ça me semble être la config de base).

Reply

Marsh Posté le 04-11-2003 à 08:57:06    

Yop,
 
   J'ai bien ces valeurs la :) J'ai juste modifié le trans SID pour le faire apparaitre dans l'url, et dans ce cas ca marche correctement. JE l'ai remis à Off. Pour les navigateurs, j'ai Mozilla 1.4 et IE 6... mais pas de difference entre les deux :(
 
Stolenkiss

Reply

Marsh Posté le 04-11-2003 à 09:33:26    

Bon,
 
   J'ai tout effacé, tout réinstallé. Et ca semble fonctionner maintenant (en tout cas pour l'exemple basique d'utilisation des sessions que j'ai posté, pas de problème).
 
   Mais j'ai voulu tester un truc un peu plus 'costaud', et j'ai eu la bonne idée de télécharger Nuked-Klan pour voir si j'arrivais à obtenir qqchse de correct. Le résultat (je ne vous mets que les premieres lignes):
 

Notice: Undefined index: user_id in d:\www\klan\upload\nuked.php on line 21
 
Notice: Use of undefined constant inscription_mail - assumed 'inscription_mail' in d:\www\klan\upload\conf.inc.php on line 148
 
Notice: Use of undefined constant db_host - assumed 'db_host' in d:\www\klan\upload\nuked.php on line 56
 
Notice: Use of undefined constant db_user - assumed 'db_user' in d:\www\klan\upload\nuked.php on line 56
 
Notice: Use of undefined constant db_pass - assumed 'db_pass' in d:\www\klan\upload\nuked.php on line 56
 
Notice: Use of undefined constant db_name - assumed 'db_name' in d:\www\klan\upload\nuked.php on line 57
 
Notice: Use of undefined constant sess_days_limit - assumed 'sess_days_limit' in d:\www\klan\upload\Includes\nkSessions.php on line 7
 
Notice: Use of undefined constant sess_inactivemins - assumed 'sess_inactivemins' in d:\www\klan\upload\Includes\nkSessions.php on line 8
 
Notice: Undefined variable: file in d:\www\klan\upload\Includes\XForum.php on line 7
 
Notice: Use of undefined constant _sessions - assumed '_sessions' in d:\www\klan\upload\Includes\nkSessions.php on line 100
 
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in d:\www\klan\upload\Includes\nkSessions.php on line 102


 
   O.o ??? alors est ce que le problème vient toujours de chez moi, ou est ce que c'est Nuked Klan (en ver. 1.4) qui joue avec mes nerfs? J'avais déjà essayé de regarder comment les sites comme Nuked Klan fonctionner, car les interfaces skinnables m'interessaient, mais je n'ai jamais réussi à faire fonctionner quoi que ce soit, en restant bloqué sur ce genre de problème.
 
   Pour le moment je viens d'installer easyPHP 1.7 sur ma machine (téléchargé pour voir si y'avait qqchse de mieux niveau config), mais je vais réinstaller Apache + PHP + MySQL comme je le faisais avant. Vos conseils sont les bienvenus :)
 
Stolenkiss


Message édité par stolenkiss le 04-11-2003 à 09:33:59
Reply

Marsh Posté le 04-11-2003 à 09:33:50    

T'as lu tous les commentaires sur php.net?
=> http://fr3.php.net/session_start
 
Il y a souvent des problemes soulevés par les utilisateurs et les solutions correspondantes.

Reply

Marsh Posté le 04-11-2003 à 09:37:33    

Tu as raison de vouloir installer Apache + PHP + MySQL a la main. Pour les conseils, tu tombes bien : il y a un topic recent sur le sujet. ;)
 
Pour ton pb avec Nuked Klan ça ressemble a un pb de config de Nuked Klan, genre un include d'un fichier de conf qui foire ou plutot des lignes qui doivent etre décommentées apres avoir mis les bonnes valeurs de conf (pour db_host, db_user et db_pass par exemple). Apres forcement t'as des variables et des constantes qui ne sont pas definies. Lis bien le readme.


Message édité par impulse le 04-11-2003 à 09:40:06
Reply

Marsh Posté le 04-11-2003 à 12:10:34    

Bon,
 
   J'ai bien réinstallé Apache et PHP en suivant le fameux tutorial. Je l'ai donc mis en module plutot qu'en CGI, mais le tutorial ne m'a pas semblé m'apporter quoi que ce soit (même si je reconnais sincèrement qu'il est plus clair que la doc, et sera donc plus facile a lire pour qqun qui installe tout ca pour la premiere fois).
 
   La seule difference avec mon install, c'est au niveau de l'affichage des erreurs:
 
   

Le but de la manoeuvre est d'ajuster le niveau de rapport d'erreurs afin qu'il ne renvoie pas les notifications. Vous n'y êtes pas obligés mais il se trouve qu'elles ont une fâcheuse tendance à apparaître fréquemment, même quand votre page vous paraît écrite correctement.
 
Aux alentours de la ligne 250, vous arriverez au chapitre de la gestion d'erreur. Retirez le point-virgule (commentaire) devant la ligne suivante:
 
 
;error_reporting = E_ALL & ~E_NOTICE
 
 
Et ajoutez un point-virgule devant:
 
 
error_reporting  =  E_ALL
 
 
La ligne activée signifie: affiche toutes les erreurs sauf les notifications (le "sauf" étant matérialisé par le tilde (~).


 
   Il est preconise de supprimer les warnings pour la lisibilite de la page. Alors ok, maintenant ca marche... mais c'est vraiment la solution? Parce que c'est comme mettre un coup de peinture sur une carrosserie rouillee non? Bon ok, il ne s'agit pas d'erreurs graves, mais je reste un peu perplexe devant les innombrables 'Notice' qui sont affichés...  
 
Stolenkiss


Message édité par stolenkiss le 04-11-2003 à 12:10:54
Reply

Marsh Posté le 04-11-2003 à 12:14:22    

Lis le readme de Nuked Klan, configure le correctement et tu n'auras plus d'erreur (error, warning ou notice).

Reply

Marsh Posté le 04-11-2003 à 13:06:25    

Bah vi c'est ce que j'ai fait,
 
   Mais quand je regarde les sources, meme pour install.php, il fait reference a des variables qui ne peuvent pas encore etre renseignees. Et comme il n'y a pas de isset()... :(  (je pense à la variable 'action', qui doit être initialisée à "install" et qui est vide chez moi lors de l'ouverture de install.php. La valeur est normalement passée par la méthode get).
 
   Mes sources sont lues correctement par contre, donc tout semble être rentré dans l'ordre. Pour Php nuke, je pense pouvoir m'y mettre tout seul maintenant. Merci bcp de votre aide en tout cas ;)
 
Stolenkiss

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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