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 $_SESSION change seul


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Points : 45
    Points
    45
    Par défaut variable $_SESSION change seul
    Bonjour à tous,
    Mon site en local sur easyphp fonctionnait sans soucis, depuis que je l'ai uplaoder sur mon hébergeur ( NUXIT ) je rencontre des pbs de sessions assez étrange et "aléatoire"

    Tout d'abord j'ai remarqué que par exemple mes variables SESSION prenais des valeurs provenant d'un $_GET ou $_POST ou de la BDD sans que je leur demande, simplement car le nom été le même
    exemple
    // pseudo de l'auteur
    $pseudo=$data['pseudo'];
    ..
    ..
    //pseudo de l'utilisateur connecté sous son profile
    echo bienvenue $_SESSION['pseudo'] // ici ca m'affiche le pseudo de l'auteur...

    Autre exemple, je me log sous mon compte,
    je met en session certaine valeur relative au USER

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if ($loginOK) 
    {
      $_SESSION['connect'] = "on";
      $_SESSION['id'] = $data['id_mb'];
      $_SESSION['id_membre'] = $data['id_mb'];
      $_SESSION['pseudo'] = $data['pseudo'];
      $_SESSION['age'] = $data['age'];
      $_SESSION['sexe'] = $data['sexe'];
      $_SESSION['_sexe_'] = $data['sexe'];
      $_SESSION['ville'] = $data['ville'];
      $_SESSION['rang'] = $data['rang'];
    }
    comme vos pouvez le voir j'ai doublé les variable id_mb et sexe car j'avais des soucis il gardait pas la valeur dans le $_SESSION mais prenais la valeur provenant d'ailleur dans le code.

    maintenant mon soucis, je me log, sous mon pseudo
    ca marque
    "bienvenue rockt "
    Toutes mes variables SESSION semble OK, puis je change de page et ca devient
    "bienvenue skl" ( skl étant un autre membre )
    Donc le $_SESSION['pseudo']=rockt est devenu $_SESSION['pseudo']=skl
    sans que je demande rien étrange....

    En local tout fonctionnait niquel..
    sur le FTP de NUXIT mon hébergeur à la racine il y à :
    /session/
    /www/

    Mon site est dans /www/ , quand je supprime l'intégralité du contenu de /session/ et que je me log, le bug n'apparait plus... car j'imagine que j'ai supprimé la session de skl...mais bon ça me pose quand même problème car je vais pas m'amuser a le vider toutes les 5 minutes, quand les membres seront connectés...et ça risque de mélanger toutes les sessions :s
    Avez vous une petite idée ?

    Merci d'avance car là je vois pas du tout

  2. #2
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 44
    Points : 51
    Points
    51
    Par défaut
    salut

    je pense qu'il serait plus judicieux de définir un tableau dans une variables de session du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $_SESSION['USER'] = array();
     
    $_SESSION['USER']['connect'] = "on";
      $_SESSION['USER']['id'] = $data['id_mb'];
      $_SESSION['USER']['id_membre'] = $data['id_mb'];
      $_SESSION['USER']['pseudo'] = $data['pseudo'];
      $_SESSION['USER']['age'] = $data['age'];
      $_SESSION['USER']['sexe'] = $data['sexe'];
      $_SESSION['USER']['_sexe_'] = $data['sexe'];
      $_SESSION['USER']['ville'] = $data['ville'];
      $_SESSION['USER']['rang'] = $data['rang'];
    le rep session sert a stocké les cookies de session (je suppose).
    fais tu un control a chaque page de la session de l'utilisateur.
    est ce que ton id de session change a chaque page.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Points : 45
    Points
    45
    Par défaut
    Bonsoir backdown,

    Je fais ceci en général
    si connect =="on" alors c'est que c'est une utilisateur authentifié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    session_start();
    if(@$_SESSION['connect'] == "on" )
    {
    }

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Points : 45
    Points
    45
    Par défaut
    A peine authentifié sous mon compte j'ai ceci:



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(9) { ["connect"]=>  &string(2) "on" ["id"]=>  &string(1) "3" ["id_membre"]=>  &string(1) "3" ["pseudo"]=>  &string(3) "jey" ["age"]=>  &string(2) "24" ["sexe"]=>  &string(1) "M" ["_sexe_"]=>  &string(1) "M" ["ville"]=>  &string(0) "" ["rang"]=>  &string(1) "3" }

    Puis des que je vais sur la page accueil ou une autre page j'ai cela :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(9) { ["connect"]=>  &string(2) "on" ["id"]=>  &string(1) "3" ["id_membre"]=>  &string(1) "3" ["pseudo"]=>  &string(5) "skl13" ["age"]=>  &string(2) "24" ["sexe"]=>  &string(1) "M" ["_sexe_"]=>  &string(1) "M" ["ville"]=>  &string(0) "" ["rang"]=>  &string(1) "3" }
    Sachant que l'utilisateur skl13, n'est ni en ligne , ni au rang 3 et son id_membre n'est pas le bon, en gros toutes les infos correspondent bien à ma session, sauf le pseudo qui change...


    ps: si je vais directement sur les menu de mon site le pseudo change pas .
    Si par contre je passe par la page ADMIN , puis ensuite je vais sur une autre page, là oui il change et passe de jey à skl13
    J'en déduis que mon bug provient de la page admin..




    Dans ma page admin je liste les 10 derniers commentaires avec kke chose du genre

    while ($data=mysql_fetch_assoc($req))
    {
    $pseudo=nl2br(htmlspecialchars(stripslashes($data['pseudo'])));
    echo $pseudo....
    }

    Comme par hasard le pseudo du dernier commentaire est : skl13
    ... j'en déduit que mon site fait l'amalgame entre la variable $pseudo et la variable $_SESSION['pseudo']... je ne comprend pas pourquoi.
    J'ai donc changé par :
    while ($data=mysql_fetch_assoc($req))
    {
    $pseudo_commentaire=nl2br(htmlspecialchars(stripslashes($data['pseudo'])));
    echo $pseudo_commentaire....
    }
    Et là, ça fonctionne....mais j'aimerai bien comprendre pourquoi, la variable $_SESSION['pseudo'] change de valeur seule ?
    Pourquoi en faites il affecte $_SESSION['pseudo']=$pseudo alors que je n'ai rien demandé, et surtout ces variables n'ont rien à voir

  5. #5
    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 rockt13 Voir le message
    while ($data=mysql_fetch_assoc($req))
    {
    $pseudo=nl2br(htmlspecialchars(stripslashes($data['pseudo'])));
    echo $pseudo....
    }
    Salut

    C'est cette ligne de code qui m'interpelle et qui pourrait être à la source de ton souci.
    Je n'ai pas la source compléte de ton script, mais je suppose que tu mets en session les variables issues de cette requête.(?)
    Si c'est le cas, ta boucle while te retourne forcemment plusieurs variables [$pseudo] différentes, et celà peut créer effectivement un conflit.
    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.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Points : 45
    Points
    45
    Par défaut
    Bonjour,

    Non je ne met pas en session les variables issues de ce WHILE.
    En fait ce while sert uniquement à afficher les commentaires.
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    <?PHP
     
    $sql = 'SELECT * FROM commentaire order by timestamp DESC LIMIT 10';
    // on envoie la requête 
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
     
     
     
     
    ?>
    <h2>Liste des 10 derniers commentaires</h2>
    <table>
    <tr>
    <th class="com">Auteur</th><th class="com">Date</th><th style="width:500px;">Message</th><th class="com">IP</th><th class="com">Voir</th><th class="com">Delete</th>
    </tr>
    <?PHP
    $color=0;
    while($data=mysql_fetch_assoc($req))
    {
    $pseudo_commentaire=nl2br(htmlspecialchars(stripslashes($data['pseudo'])));
    if($color==0){ $color2 = "#000000"; $color = 1; }else { $color2 = "#8e5f47"; $color = 0; }
    	echo '<tr style="background-color:'.$color2.';">';
    	echo '<td >'.$pseudo_commentaire.'</td><td>'.date('d/m/y  H:i', $data['timestamp']).'</td><td>'. nl2br(htmlspecialchars(stripslashes($data['message']))).'</td><td>'. $data['ip_com'].'</td>';
    	echo '<td><a class="image" href="index.php?id_img='.$data['id_photo'].'&amp;p=watch#'.urlencode($data['id_com']).'">	<img style="border:none;"src="./img/ico/loupe-icon.png" alt="Voir le commentaire"/></a></td>';
    	echo '<td style="text-align:center;"><img src="./img/ico/delete-icon.png" /></td>';
    	echo '</tr>';
    }
    }
    else
    {
    	header('Location:index.php');
     
    }
    ?>
    Voila on voit que j'ai remplacé $pseudo par $pseudo_commentaire.
    Donc quand j'arrive sur cette page je suis forcemment logé, et forcement $_SESSION['pseudo']=jey , mais des que j'arrivais sur cette page, quand il y avais encore $pseudo=... , et bien $_SESSION['pseudo'] prenais la valeur du dernier $pseudo de ma boucle while.
    Etrange quand meme non ? Simplement parceque le nom est le même pourtant les variables non rien à voir...

  7. #7
    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
    Ok, tu crées donc une session au début ( ton premier message) soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['pseudo'] = $data['pseudo'];
    Ensuite, tu intégres un script qui comprend :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while($data=mysql_fetch_assoc($req))
    {
    $pseudo_commentaire=nl2br(htmlspecialchars(stripslashes($data['pseudo'])));
    A mon avis, il y a écrasement de ta variable de session, qui est remplacé finalement par le dernier de ta boucle while.
    Je ne vois que cette hypothése.
    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.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Points : 45
    Points
    45
    Par défaut
    Oui effectivement il y a écrasement quelque part, mais pourquoi? puisque je ne repasse jamais par la fonction qui initialise mes variables de session. C'est ça qui est vraiment étrange ...j'ai écris au support technique et ils me disent que ça vient sûrement de mon code...toujours est-il que je n'avais ce pb en local...

  9. #9
    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
    Dans ta table commentaire, tu devrais tester de cette façon.
    Rajouter un champ pseudo_2 avec les mêmes contenus que pseudo.
    Exemple :
    pseudo = Joe
    pseudo_2 = Joe
    etc...

    tu mets en session
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['pseudo'] = $data['pseudo'];
    Mais tu modifies ta requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while($data=mysql_fetch_assoc($req))
    {
    $pseudo_2=nl2br(htmlspecialchars(stripslashes($data['pseudo_2'])));
    Ceci, de façon à bien dissocier ta requête de la session.
    Celà ne prend que 5 minutes.

    Tu ne peux pas avoir 2 variables différentes pour $data['pseudo'] dans un même script.
    Dans ton cas de figure, et par exemple $_SESSION['pseudo'] = $data['pseudo']; pourrait correspondre à Joe
    Alors que le dernier de ta boucle while, $data['pseudo'] pourrait correspondre à Remy par exemple.
    C'est conflit assuré.

    PS: Une petite observation, je ne comprends pas non plus l'utilité de ton nl2br.
    Encore que tu l'utiliseraiss pour un texte long, je comprendrais, mais pour pseudo, je pige pas.
    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.

  10. #10
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2008
    Messages : 106
    Points : 152
    Points
    152
    Par défaut
    Pour ton problème de pseudo, cela peut venir de register_globals.
    Désactive cette directive.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Points : 45
    Points
    45
    Par défaut
    Merci pour vos réponses je vais essayer avec register_global car étant donné que ça marchait très bien en local je pense que c est une difference de parametrage sur le serveur qui est entraine ce bug.

Discussions similaires

  1. Variable qui change de valeur "toute seule"
    Par GDMINFO dans le forum C++
    Réponses: 9
    Dernier message: 14/10/2010, 18h12
  2. Variable qui change de valeur toute seul :(
    Par lcfseth dans le forum C
    Réponses: 12
    Dernier message: 22/12/2007, 12h25
  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. Variable qui change après un DispatchMessage
    Par SekYo dans le forum Windows
    Réponses: 9
    Dernier message: 30/09/2004, 16h22

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