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 :

Variable de $_SESSION disparue


Sujet :

Langage PHP

  1. #1
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 234
    Points : 1 897
    Points
    1 897
    Par défaut Variable de $_SESSION disparue
    Bonjour,

    J'ai le fichier setSession.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
    $_SESSION[$_POST['cle']] = $_POST['valeur'];
    ?>
    ... qui est appelé par la requête Ajax (via JQuery) à partir d'une page web comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function setSession(cle, valeur)
        {
            // alert('variable dans session');
            $.ajax({
                type: "POST",
                url: "http://localhost/test/setSession.php",
                data: "cle="+cle+"&valeur="+valeur,
                success: function (){
                    alert('Donnée sauvegardée);
            }
            });
        }
    ... la requête fonctionne et la variable est bien renseignée dans $_SESSION par le serveur lorsqu'il exécute le fichier setSession.php.
    J'ai vérifié en utilisant le mode debug et en affichant le contenu de la variable $_SESSION.

    Plus tard, la page web qui a envoyé cette requête Ajax est soumise (soit par form ou href).
    Quand le serveur PHP reçoit cette requête il essaie de lire la variable renseignée précédemment en $_SESSION mais celle-ci n'existe pas alors.

    Pourquoi celle-ci a disparue ? Comment la rendre persistante en mémoire pour pouvoir la lire lorsque la page web est soumise ?

    Merci d'avance.

    A+

  2. #2
    Membre habitué
    Inscrit en
    Décembre 2009
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 79
    Points : 152
    Points
    152
    Par défaut
    Il ne manquerait pas l'appel à la fonction session_start() pour démarrer la session ?

  3. #3
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 234
    Points : 1 897
    Points
    1 897
    Par défaut
    Citation Envoyé par OlgarK Voir le message
    Il ne manquerait pas l'appel à la fonction session_start() pour démarrer la session ?
    Je ne pense pas puisque le tableau $_SESSION existe bien lors de la soumission de la page web.

    C'est seulement la variable renseignée précédemment dans ce tableau qui n'existe plus.

    A+

    Citation Envoyé par OlgarK Voir le message
    Il ne manquerait pas l'appel à la fonction session_start() pour démarrer la session ?
    Je viens de rajouter cette commande mais la variable est toujours absente lors de sa lecture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
     
    session_start();
     
    $_SESSION[$_POST['cle']] = $_POST['valeur'];
     
    ?>
    A+

  4. #4
    Membre actif Avatar de speedy_g
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 213
    Points : 242
    Points
    242
    Par défaut
    Comme les variables de session sont stockées chez le client, normallement il ne devrait pas y avoir de problème.

    Ne serais-ce pas une réinitialisation involontaire de cette variable ?.

    du style if(condition) { unset($_SESSION[clef]) }

  5. #5
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 234
    Points : 1 897
    Points
    1 897
    Par défaut
    Citation Envoyé par speedy_g Voir le message
    Comme les variables de session sont stockées chez le client, normallement il ne devrait pas y avoir de problème.

    Ne serais-ce pas une réinitialisation involontaire de cette variable ?.

    du style if(condition) { unset($_SESSION[clef]) }
    Non pas du tout.

    J'ai même essayé de passer par $_SERVER et $_REQUEST mais le problème reste le même.

    A+

  6. #6
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 234
    Points : 1 897
    Points
    1 897
    Par défaut
    Après plusieurs tests, il semblerait que je travaille sur 2 sessions distincts.

    Quand j'affiche la page web la session contient 30 variables.

    Quand la page web lance le script Ajax, la session NE CONTIENT QUE la variable renseignée.

    Quand la page web est soumise par la suite, je retrouve le même contenu de la session avec ses 30 variables et la variable renseignée n'est pas présente.

    Comment donc travailler avec la même session ? Ou plutôt pourquoi l'objet n'est-il pas le même alors qu'un objet $_SESSION est normalement persistent pour un utilisateur à travers sa navigation.

    A+

  7. #7
    Membre actif Avatar de speedy_g
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 213
    Points : 242
    Points
    242
    Par défaut
    Il était nécessaire de mettre session_start(); avant $_SESSION[] = truc;

    je me demande qud même si elle existe bien ?, j'ai plutot l'impression qu'il y'a création d'une variable locale qui finit avec la fin du script.

    Est-ce que celle-ci est bien présente avant l'assignation $_SESSION[ = truc; ?

  8. #8
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 234
    Points : 1 897
    Points
    1 897
    Par défaut
    Citation Envoyé par speedy_g Voir le message
    Il était nécessaire de mettre session_start(); avant $_SESSION[] = truc;

    je me demande qud même si elle existe bien ?, j'ai plutot l'impression qu'il y'a création d'une variable locale qui finit avec la fin du script.

    Est-ce que celle-ci est bien présente avant l'assignation $_SESSION[ = truc; ?
    Oui, tout à fait.

    A+

  9. #9
    Membre actif Avatar de speedy_g
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 213
    Points : 242
    Points
    242
    Par défaut
    Il est toujours possible d'afficher l'id de la session echo session_id(); pour voir si les deux id's sont les memes ( script ajax, celui ou il y'a les 30 variables)

  10. #10
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 234
    Points : 1 897
    Points
    1 897
    Par défaut
    Citation Envoyé par speedy_g Voir le message
    Il est toujours possible d'afficher l'id de la session echo session_id(); pour voir si les deux id's sont les memes ( script ajax, celui ou il y'a les 30 variables)

    En effet il y avait bien 2 sessions différentes.

    Il faut donc faire cela avant de renseigner la variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    session_name('dk_sid');
    session_start();
    ... puis ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $_SESSION[$_POST['cle']] = $_POST['valeur'];
    C'est dommage que dans la requête Ajax je ne puisse pas passer le nom de la session comme par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $.ajax({
                type: "POST",
                url: "http://localhost/ips/main/inc/setSession.php",
                data: "cle="+cle+"&valeur="+valeur+"&nomSession=getNomSessionCourantePourCettePageWeb(),
                success: function (msg){
                    alert('Data save : ' + msg);
            }
            });
    ... puis dans le fichier PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session_name($_POST['nomSession']);
    Cela m'éviterait de DEVOIR CONNAITRE A L'AVANCE le nom de la session pour pouvoir l'appeler ensuite et de réaliser un code bien plus générique.

    Si quelqu'un a une solution pour cela ?

    Maintenant et avec cette solution :

    Si 2 utilisateurs utilisent la page web sur 2 postes différents. Le fait de nommer explicitement le nom de la session, signifie que les 2 utilisateurs utiliseront le même nom de session.

    Dans ce cas quelle est la bonne réponse :

    REPONSE 1 : qu'il y aura une SEULE ET MEME SESSION pour tous les 2 ?

    REPONSE 2 : chacun aura quand même une session distincte (car 2 navigateurs différents et/ou 2 PC différents) même si chacune ont le même nom ?


    Merci d'avance.

    A+

  11. #11
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Faut faire attention à ne pas confondre le nom de la session et l'ID de la session.
    De plus, et par défaut les sessions ont tous un nom : PHPSESSID
    Tu peux définir ton propre nom, mais dans l'absolue ce n'est pas utile, sans compter que ce n'est pas cela qui va résoudre ton problème.
    Si tu as 10 000 utilisateurs au même moment, les sessions auront tous le même nom, mais c'est les IDs qui seront uniques.

    Ton problème est malheureusement un peu compliqué, et il demandera d'avoir une gestion des sessions et des cookies plus évoluée.
    Te reposer uniquement sur les session ne suffira pas à mon avis.

    Dans ton cas, lorsque tu appel une autre page via Ajax, il faudrait conserver la même session.
    Les cookies vont normalement aider à conserver la même session.
    Faut créer un cookie avec le même nom que la session ( session_name() ), et lui affecter le même ID de session ( session_id() ), de même que lui indiquer le nom de domaine, une date d'expiration, etc ...

    Normalement le principe est le suivant : Si un cookie est présent dans le navigateur, du même domaine, avec un ID présent sur le serveur et que la date d'expiration est encore valide, alors il est conservé et reconduit.

    Voir les fonctions session_set_cookie_params, setcookie()


    Réponse 1 :
    - Concernant l'ajax, c'est ce qu'il faudrait obtenir, même nom, même ID car c'est le même utilisateur.
    - Pour des utilisateur différents et les pages classiques, il faut le même nom mais un ID différent.

    Réponse 2 : Si ce sont des utilisateurs différents, alors le même nom mais un ID différents peu importe le navigateur, Os et compagnie.


    Fait un essai en cliquant sur un des liens mais en ouvrant 1 nouvel onglet.
    Théoriquement la problématique est la même que pour l'ajax.
    La session + cookie devrait être reconduit, et pas avoir 2 ID différents.


    Enfin, je pense qu'il faudrait prospecter dans ce sens là.

  12. #12
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Citation Envoyé par Mister Nono Voir le message
    Maintenant et avec cette solution :

    Si 2 utilisateurs utilisent la page web sur 2 postes différents. Le fait de nommer explicitement le nom de la session, signifie que les 2 utilisateurs utiliseront le même nom de session.

    Dans ce cas quelle est la bonne réponse :

    REPONSE 1 : qu'il y aura une SEULE ET MEME SESSION pour tous les 2 ?

    REPONSE 2 : chacun aura quand même une session distincte (car 2 navigateurs différents et/ou 2 PC différents) même si chacune ont le même nom ?

    Bonjour

    Le nom de session n'a pas vraiment d'intérêt, sauf un paramétre utile pour sauvegarder la totalité des variables échangées en cours d'une session, sur MySQL par exemple.
    (Il pourra servir d'id de référence)

    - 2 PC différents ne signifie pas obligatoirement 2 navigateurs différents, certes.
    Mais si les PC sont différents et que les navigateurs sont les mêmes, dans ce cas et inévitablement... 2 sessions distinctes sont initiées sur les navigateurs respectifs des utilisateurs (même si ces navigateurs sont les mêmes), donc des sessions totalement individuelles, et isolées.
    Par conséquent, pas de risque de conflit comme celui que vous semblez rencontrer.

    En revanche, si vous travaillez sur une solution collaborative, c'est un peu plus complexe.
    Et si c'est le cas, il y a des aménagements à apporter côté MySQL, et également dans l'élaboration du lancement de la session.

    Mais je n'en sais pas plus sur votre "projet", ou tout du moins sur sa destination.

  13. #13
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 234
    Points : 1 897
    Points
    1 897
    Par défaut
    Merci à tous pour vos réponses.

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.3] les variables de $_SESSION
    Par safa.nasich dans le forum Langage
    Réponses: 3
    Dernier message: 29/06/2011, 06h56
  2. Variable $_SESSION automatisé
    Par mangafan dans le forum Langage
    Réponses: 8
    Dernier message: 18/04/2006, 16h45
  3. [Sécurité] variable $_session dans du javascript
    Par sam01 dans le forum Langage
    Réponses: 2
    Dernier message: 09/04/2006, 19h38
  4. Changer une variable $_SESSION -> Formulaire
    Par Nadd dans le forum Langage
    Réponses: 2
    Dernier message: 05/02/2006, 23h37
  5. Pb passage de variable $_GET => $_SESSION
    Par sk8world dans le forum Langage
    Réponses: 3
    Dernier message: 19/12/2005, 15h18

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