IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Variables de Sessions crées dans une Function perdues


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 19
    Par défaut Variables de Sessions crées dans une Function perdues
    Bonjour,

    Mon problème est le suivant :

    Quand, dans une "function", je crée une variable de session, par exemple ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function compteur()
    {
    $_SESSION['compteur'] = 1;
    }
    la variable de session "compteur" est bien créée, avec une valeur de 1. Je peux l'utiliser ailleurs dans le script, dans d'autres Functions (les variables de sessions sont "super-globales", si j'ai bien compris ?), et même dans des scripts appelés via Include.

    Par contre, dès que je quitte la page, la variable de session disparait : Elle n'est pas passée à la page suivante comme le sont, par exemple, les variables de session crées hors d'une "Function (ces dernières sont passées correctement).

    Que faut-il faire pour que les variables de session créées à l'intérieur d'une "Function" soient passées à la page suivante comme les autres ?

  2. #2
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    session_start() au début de tes scripts

  3. #3
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 19
    Par défaut
    C'est déja le cas.
    D'ailleurs, ne penses-tu pas qu'AUCUNE variable de session ne serait passée si j'avais oublié session_start ?

    Je rappelle que les variables de sessions crées HORS d'une fonction (dans le cours normal du script, quoi), elles, passent très bien à la page suivante.

  4. #4
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Tu dois surement écraser cette variable en dehors de ta fonction...

  5. #5
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 19
    Par défaut
    Nope. Il y a un TAS de variables créées dans des fonctions dans mon script (en fait, la presque totalité). Et elles subissent toutes la même punition.

    Même chose pour les variables de sessions que j'ai créé pour l'essai (et qui n'existent donc nulle part ailleurs dans le script).

    Et je rappelle que ces variables de session existent jusqu'à la fin du script (print_r faisant foi) et ont, au contraire, disparu au début du script suivant (un autre print_r faisant foi aussi).
    Alors que les variables de session créées en dehors d'une fonction elles, existent toujours au début du script suivant.

  6. #6
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Essaie ce test qui vaut ce qu'il vaut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    <?php
     
    session_start();
     
    if (@$_GET['clear']) {
        $_SESSION = array();
    }
     
    var_dump($_SESSION);
     
    $_SESSION['outside'] = 'outside';
    function foo() {
        $_SESSION['inside'] = 'inside';
    }
    foo();
     
    var_dump('<hr>Sur la prochaine page on doit voir :',$_SESSION);
    ?><a href="?next">next</a> | <a href="?clear=1">clear</a>

  7. #7
    Membre émérite
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par défaut
    Déjà : quelle version de PHP ?

    En tous cas je confirme que $_SESSION est bien un tableau "super global", et donc il n'y a aucune raison qu'il y ait un comportement différent dans une fonction...

    Mr N. : perso j'ajouterais un "error_reporting( E_ALL )", juste au cas où

  8. #8
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 19
    Par défaut
    PHP Version 4.4.0-4


    Bon, alors le script que tu propose fonctionne.

    J'ai réussi a isoler ce qui semble être la ligne fautive :

    Je place la commande suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['enfant1']="2";
    Avant la ligne "fautive", la variable est crée et passe bien à la page suivante.
    Après la ligne "fautive", la variable est également créée (un print permet de le constater), mais elle ne passe plus à la page suivante (ce qui est pour moi incompréhensible.

    La ligne "fautive" est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $_SESSION[$_SESSION['ashtart_annu']]['ashtart_cat']=$_SESSION['ashtart_nvcat'];
    Les valeurs sont :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['ashtart_nvcat']
    La valeur ici ne change rien (qu'elle soit nulle, égale à zéro ou autre chose).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['ashtart_annu']
    La valeur ici vaut 1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION[$_SESSION['ashtart_annu']]['ashtart_cat']
    Cette variable prend la valeur de l'opération de manière parfaitement normale.

    Voici le test :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $_SESSION['ashtart_nvcat']=1;
    $_SESSION['enfant14']="1";
    $_SESSION[$_SESSION['ashtart_annu']]['ashtart_cat']=$_SESSION['ashtart_nvcat'];
    print "*".$_SESSION[$_SESSION['ashtart_annu']]['ashtart_cat']."*";
    $_SESSION['enfant13']="1";
    print $_SESSION['enfant14']."#".$_SESSION['enfant13'];
    Résultat :

    La page affiche :

    Donc les deux variables de sessions ont bien été créees, et la ligne "fautive" fonctionne bien.

    Mais quand la page suivante demande un :
    Je n'ai que la réponse suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array ( [enfant14] => 1)
    Enfant13 a disparu !

Discussions similaires

  1. [MySQL] variable de session stoké dans une base de donnée
    Par debo41 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/06/2009, 11h46
  2. récupérer une variable de session php dans flash
    Par sanatou dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 14/06/2008, 00h20
  3. Variable de session initialisée dans une iframe
    Par magdalena dans le forum Langage
    Réponses: 2
    Dernier message: 02/07/2007, 11h06
  4. Réponses: 1
    Dernier message: 17/01/2007, 21h52
  5. recuperer la valeur d'une session PHP dans une variable javascript
    Par pierrot10 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 07/09/2006, 18h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo