Session easyphp 1.8

bonjour,
j'ai besoin de savoir à quoi doit ressembler ma configuration pour pouvoir utiliser les sessions...
j'ai fait un exemple tout simple de session tiré d'un tuto, et il ne marche pas : lorsque je teste si la session existe, (isset), la reponse est toujours false alors que lorsque je vais voir le fichier tmp dans lequel sont stockées les sessions, elles apparaissent bien...
quelqu'un peut-il m'éclairer sur ce sujet...?
d'avance: merci

21 réponses

Résumé de la discussion

Utilisation des sessions PHP et échec du test isset($_SESSION['nom']) malgré les fichiers de sessions visibles dans le dossier tmp. Plusieurs répondants pointent des causes et correctifs: démarrer la session sur chaque page avec session_start(), vérifier que $_SESSION est bien utilisé plutôt que des variables locales, et noter que session_register est obsolète. Des pistes liées au pare-feu ou aux cookies sont évoquées, tout comme la vérification de la configuration PHP (register_globals éventuel et gestion des sessions) et des tests simples comme echo $_SESSION['nom'] pour diagnostiquer.

Bobot (l’IA à votre service)
  1. salut,
    comment fais tu tes tests isset ? $_SESSION est un tableau, peut etre que c'est juste une mauvaise utilisation ?
    1. ben je fais comme ça:
      if (isset($_SESSION['nom']))
      

      il me semble que c'est bon...
      en plus, je teste un petit exemple tiré d'un tuto...
  2. Salut,

    Jette un coup d'oeil par là et utilise l'exemple:
    http://www.nexen.net/docs/php/annotee/ref.session.php?lien=sessions

    A savoir, que 'isset()' sert juste à vérifier qu'une variable à bien été déclarer, donc existe, mais elle peut avoir une valeur 'NULL' ou '0' ! etc...
    bye @+
    1. ok, mais ce qui ce passe, c'est que la condition :
      if (isset($_SESSION['nom']))
      

      n'est jamais vérifiée...et je ne comprends pas pourquoi
  3. tu demarres bien ta session avant tout envoi de header ?
    1. ben ouai, je te montre la page en question :
      <?
      session_start();
      if (isset($_SESSION['nom']))
      	{$nom=$_SESSION['nom'];}
      else {$nom="mais votre nom a été effacé";}
      ?>
      <html>
      	<body>
      		Vous êtes toujours parmis nous
      		<b><? echo $nom; ?></b>.<br />
      		Effacement de votre nom en cliquant
      		<a href="page4.php">ici</a>.<br />
      		Effacement de votre session en cliquant
      		<a href="page5.php">ici</a>.<br />
      	</body>
      </html>
      


      et sur toutes mes pages, je démarre toujours de la même façon :
      <?
      session_start()
      ...
      ?>
      


      voilà...en tout cas, merci de ton aide :)
  4. Ok, je vois.
    Ton problème vient de la portée de ta variable $nom.
    Lorsque tu fermes php (?>), elle n'est plus définie ! tu peut refaire ton test plus tard car $_SESSION, comme $_POST ou $_GET sont globales. Le problème ne vient absoluement pas de ta session.
    J'espere que j'ai vu juste ...?
    @+
    1. je crois pas que ce soit ça...
      j'ai modifié, et ça change rien...
      <?
      session_start();
      ?>
      <html>
      	<body>
      		Vous êtes toujours parmis nous
      		<b><? if (isset($_SESSION['nom']))
      				{$nom=$_SESSION['nom'];}
      			  else {$nom="mais votre nom a été effacé";}
      			  echo $nom;?></b>.<br />
      		Effacement de votre nom en cliquant
      		<a href="page4.php">ici</a>.<br />
      		Effacement de votre session en cliquant
      		<a href="page5.php">ici</a>.<br />
      	</body>
      </html>
      

      à moins que je n'ai pas fait la bonne modif ?
      1. non, non tes modifs sont correctes... la seule chose qui pourrait faire que ca ne marche pas est que $_SESSION['nom'] soit non definie... tu a bien demarré la Session dans l'autre page ? Sinon peut etre que isset n'a pas l'effet attendu, essaye un petit
        echo $_SESSION['nom']; 
        pour voir
        1. effactivement, j'ai une erreur :

          Notice: Undefined index: nom in c:\program files\easyphp1-8\www\tuto1 session\page3.php on line 10

          lorsque je rajoute :
          echo $_SESSION['nom'];


          mais c'est pas logique puisque la session est démarré dans les 2 autres pages...

          page1.php:
          <?
          session_start();
          ?>
          <html>
          	<body>
          		<form method="POST" action="page2.php">
          			Entrez Votre Nom : <input type="text" name="nom">
          			<input type="submit" value="ok">
          		</form>
          	</body>
          </html>
          


          page2.php:
          <?
          session_start();
          $nom=$_POST['nom'];
          $_SESSION['nom']=$nom;
          ?>
          <html>
          	<body>
          		Bienvenue sur ce site <b><? echo $nom; ?></b>.<br />
          		Regardons ce qui se passe sur la <a href="page3.php">page</a> suivante.<br />
          	</body>
          </html>
          


          j'comprends pas...
          1. Je t'avoue que je sèche...
            essaye de mettre
            $nom=$_POST['nom'];
            $_SESSION['nom']=$nom;

            dans la balise body, en vérifiant bien que $_POST['nom'] est 'isset' et '!empty'... a part ca... Sorry...
        2. mais c'est bizarre, parce que quand je fais :
          echo $_SESSION['nom']
          

          dans page2.php, ça écrit effactivement le nom...
          enfin, merci quand même...
          1. d'accord, mais apparemment, on me parle de problèmes de cookies...
            1. ta regardé ton register global dans le php .ini ?? il doit etre ON ! sa marche pas sinon tes sessions ...
              1. ben nan, il est à off, mais ça doit marcher quand même...
                de toute façon, je viens de faire l'essai en le mettant à on, et ça donne exactement la même chose...
                merci quand même :)
            2. ok voici koment on utilise les sessions:

              • Enregistrement d’une variable session
              session_start(); // active la session
              $variable = ………;
              session_register("variable"); //pas de $

              • Test d’enregistrement d’une variable
              session_start(); // active la session
              $variable = ………;
              session_register("variable"); //pas de $
              session_start(); // active la session
              if (!session_is_registered(variable))...

              • Fin de session , Changement durée session
              session_destroy();
              session_cache_expire(n);
              n=session_cache_expire();

              • Informations sur la session
              print("nom de session = ".session_name());
              print("ID session = ".session_id());

              en espérant que ça vous aidera ;)
              1. tu veux dire que mon code n'est pas bon...? ça m'étonne, il est tiré d'un tuto...
                l'as-tu regardé...?il est juste au dessus (page1.php, page2.php, page3.php)
                merci quand même, mais je crois qu'il est bon ce code... ;)
            3. Pour ma part je ne suis pas sur que ton code soit correct
              Je n'est jamais utiliser de mémoire la fonction isset pour des variables de sessions
              De plus les infos que je t'ai fourni sont tirées d'un cours php d'un de mes profs!
              j'ai pas mal fait d'intranet cette année et j'ai pas souvenir d'avoir utiliser la fonction isset pour des variables de session mais plus souvent pour des cookies
              Vérifie que ça fonctionne avec les fonctions que je t'ai fourni
              Bon courage

              NB: ne pas tjs se fier à des exemples de tuto

              ciao
              1. re moi

                je viens d'examiner vite fait ton code php
                A quel moment tu créés tes variables de sessions?
                je vois pas l'instruction session_register
                C peut etre pour ça que ton isset ne fonctionne pas

                bon courage
                1. je cite php.net, la bible :
                  Attention
                  Si vous voulez que votre script fonctionne indépendamment de la configuration de la directive register_globals, vous devez utiliser la variable $_SESSION. Tous les éléments de $_SESSION sont automatiquement enregistrés. Si votre script utilise session_register(), il ne fonctionnera pas dans les environnements où register_globals est désactivée.
                  1. ben voilà,
                    du coup, faut pas que j'utilise session_register() vu que mon script utilise $_SESSION, et de plus, j'ai pas besoin d'utiliser le register_global à ON.
                    vraiment, le code doit être bon...
                    en plus, il y a quelqu'un qui l'a testé chez lui en local, et il fonctionne!!!
                2. Autant pour moi!!

                  Je viens de vérifier ton code, il me parait bon!
                  Par contre jvois pas trop l'utilité de ton <? session_start() ?> pour la page1.php vu ke tu fé aucun appel à $_SESSION(...)

                  Sinon pour la configuration de php.ini fait gaffe ke tu n'est pas mit on à une ligne ké en commentaire en effet register_global apparait plusieurs fois dans le fichier php.ini

                  dsl ke t conseils ne té rien apporté

                  Bon courage
                  1. c'est rien, c'est rien...
                    effectivement, il ne sert à rien le session_start de page1.php...
                    c'était dit dans le tuto...
                    pour le registers_global, ils sont bien tous à off...

                    merci quand même!!!
                3. si quelqu'un a une autre idée, on verra ça lundi...
                  bon week end à tous!
                  1. Salut,

                    j'ai eu le même probleme que toi avec Easyphp 1.8 et les sessions

                    il faut à la fois faire un register ET utiliser $_SESSION

                    Page 1
                    $user_pass="password"
                    session_start();
                    session_register ("user_pass");
                    $_SESSION["user_login"] =$user_pass;

                    Page 2
                    session_start();
                    echo $_SESSION["user_login"] ;

                    en esperant t'avoir aidé !

                    A+
                    Waga
                  2. @Wagaben écoute, moi, j'y arrive pas...

                    peux-tu tester chez toi un tout petit exemple qui marche et m'envoyer le code stp?
                    comme ça je vérifierai si ça fonctionne aussi sur mon ordi...

                    par contre, j'ai une autre question:
                    est-il possible que cela na marche pas à cause d'un par-feu qui stopperait les cookies par exemple ?
                4. pour le registers_global, ils sont bien tous à off...


                  Il doive etre à ON justement..

                  jte conseil d'installer easy php 1.7 et d'essayer avec cette version, jte pari que sa fonctionnera :D
                  1. Non surtout pas, cette variable est désactivée pour une bonne raison, ça marche très bien avec OFF
                5. romain, tu voulais que je te tienne au courant:
                  bon ben voilà, j'ai enfin trouvé, c'était mon firewall qui me bloquait les cookies...

                  merci à tous ceux qui m'ont aidés :)
                  • 1
                  • 2