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 :

Changement aléatoire d'une variable de session [PHP 5.2]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 12
    Par défaut Changement aléatoire d'une variable de session
    Bonjour,

    un bug sur lequel je bute depuis plusieurs jours :

    Je suis sur une release2 d'OVH en Gentoo.

    je fais une première page de formulaire avec <? session_start(); ?>
    Dans ce formulaire, je crée un token :

    $token = md5(uniqid(rand(), true));

    j'enregistre le token comme variable de session : $_SESSION['token']=$token;

    Pour débugger , je le fais écrire cette variable :
    echo "token = $_SESSION['token']" <br>;
    ainsi que l'identifiant de session.

    Mon formulaire envoie (en get) le token qui est comparé à la variable de session pour activer la page 2. Ca ne fonctionne pas.

    Je reste sur la page 1, je rafraîchis, je note le session _ID et par ftp je le télécharge et l'ouvre : la variable de session token est différente et correspond à celle qui sera lue dans la page 2 ?????

    Alors que la page 1 relis bien la variable stockée, celle qui apparaît dans le fichier de session est différente. Si je remplace le token par une chaîne de caractères 'mavariable', alors là, tout est OK, la variable de session affichée dans la page1, celle affichée dans la page2 et celle contenue dans le fichier session_id est bien 'mavariable'.

    Quelqu'un a t'il une idée ? J'ai une vingtaine de sites, ce problème ce déclare aléatoirement sur 2 sites.

    le code de la page 1:
    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
     
    <?PHP
    ini_set('session.save_path','/home/xxxxxxxx/www/sessions');
    session_start();
    ?>
    $token = md5(uniqid());
    $_SESSION['token'] = $token;
    echo "tok=".$token." et session = ".$_SESSION['token']." <br>";
    $nom = session_name();
    $id = session_id();
    echo "nom session: $nom<br>";
    echo "id session: $id<br>";
     
    //le lien pour agrandir l'image :
     
    <a href="javascript:JOpenWn('window_rdp.php?img_name= <?echo $image;?>&img_w=<?echo $width;?>&img_h=<?echo $height;?>&tok=<?echo $token;?>','photo','scrollbars=yes,resizable=yes,w idth=<?echo $width2;?>,height=<?echo $height2;?>')">
    <img src="<?echo $image_m;?>" width="75" alt="clic pour agrandir"></a>
    le code de la page 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    ini_set('session.save_path','../sessions');
    session_start();
     
    $tok=$_GET['tok'] ;
    $session=$_SESSION['token'];
     
    //echo "tok=".$tok." et session = ".$_SESSION['token']." <br>";
    if (isset($_SESSION['token'])&& $tok == $_SESSION['token']){
    ...}
    Ces codes sont à l'identique de ceux qui fonctionnent sur d'autres sites hébergés sur le même serveur et configurés de la même manière.

    La question est de comprendre pourquoi quand je fais en page 1

    $_SESSION['token'] = $token;
    echo " session = ".$_SESSION['token']." <br>";

    je ne retrouve pas cette variable sauvegardée dans le fichier de session alors que le echo est OK ???


    Merci pour votre aide.

  2. #2
    Membre émérite 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
    Par défaut
    Citation Envoyé par Ginux Voir le message
    .... Si je remplace le token par une chaîne de caractères 'mavariable', alors là, tout est OK, la variable de session affichée dans la page1, celle affichée dans la page2 et celle contenue dans le fichier session_id est bien 'mavariable'.....
    Bonjour

    La conclusion est certainement dans ton observation ci-dessus.

    Que peut-on en déduire ?
    Déjà, que ta session est conforme et parfaitement créée, et on accéde bien à la variable fixe.

    Mais voilà, pourquoi celà ne fonctionne pas dans le premier cas.
    Simplement parce qu'il y a écrasement de ta variable de session md5, et elle est recréée à chaque fois que tu relances cette même page.
    Si tu lances un F5 d'actualisation, tu écrases obligatoirement ta variable par une autre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    session_start();
    $token = md5(uniqid(rand(), true)); // variable aléatoire
    $token_2 ="1738475529"; // variable fixe
    print("<br>");
    print("$token");
    print("<br>");
    print("$token_2");
    ?>

  3. #3
    Membre émérite 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
    Par défaut
    Complément :

    Puisque tu travailles avec une variable générée aléatoirement, tu devrais créer une condition pour éviter l'écrasement de la var enregistrée.

    Sobre exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
    session_start();
     
    if ((isset($_SESSION['token'])) 
    { 
    //on fait rien...ou ce que tu veux
    }
    else
    {
    $token = md5(uniqid());
    $_SESSION['token'] = $token;
     
    }

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 12
    Par défaut
    Citation Envoyé par alain31tl Voir le message
    Bonjour

    La conclusion est certainement dans ton observation ci-dessus.

    Que peut-on en déduire ?
    Déjà, que ta session est conforme et parfaitement créée, et on accéde bien à la variable fixe.

    Mais voilà, pourquoi celà ne fonctionne pas dans le premier cas.
    Simplement parce qu'il y a écrasement de ta variable de session md5, et elle est recréée à chaque fois que tu relances cette même page.
    Si tu lances un F5 d'actualisation, tu écrases obligatoirement ta variable par une autre.
    Merci Alain31tl pour cette première réponse. Je suis d'accord avec ta première conclusion...quoique...

    Je ne rafraîchis pas la page, ou plutôt je ne la rafraîchis pas à nouveau...

    Je charge ma page, je fais afficher la variable de session et le session ID, et sans rafraîchir je vais chercher par FTP le fichier de session correspondant, c'est là que je constate que la variable est différente.
    J'insiste sur le fait que c'est aléatoire, aujourd'hui, ça fonctionne...et que je rencontre ce souci sur 2 sites sur une vingtaine installé et paramètré à l'identique.

    Ca a l'air plus sioux qu'un écrasement de variable...

  5. #5
    Membre émérite 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
    Par défaut
    Pourquoi tu n'essayes pas ma suggestion précédente, soit celle de verifier si la session token est existante, avant quoique ce soit.
    Ca mange pas de pain, et celà fait avancer les choses.

    [Edit]

    Et pour faire plus court :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if ((!isset($_SESSION['token'])) 
    { 
    $token = md5(uniqid());
    $_SESSION['token'] = $token;
    }

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 12
    Par défaut variable de sessions bizares
    Oui je vais essayer, comme c'est aléatoire, e, effet cela pourrait venir d'une réinitialisation des variables, même si je ne vois pas d'où...
    Le problème est que pour l'instant, ça fonctionne, donc je ne peux pas faire l'essai. Dès que ça replante, je tente.
    Merci pour ton aide.

  7. #7
    Membre émérite 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
    Par défaut
    Revenons un peu en arrière :
    1 -Utilise une variable fixe.
    Lances un F5 d'actualisation.( Ben oui, rien de tel pour tester)
    Elle est bien présente, et tjrs identique ?.
    Et encore, et encore, et encore.
    Simplement parce qu'elle est mise en session et qu'elle y restera, tant que la valeur de cette variable de session ne sera pas modifiée intentionnellement.
    Dans ce cas de figure, tu maîtrises ta/tes variables.

    2- Tu crées une session avec une syntaxe php (md5) qui fournit de l'aléatoire.
    Autrement dit, ce n'est pas toi qui décide ou maîtrise la valeur de cette variable.
    Comment veux-tu que ta session initilialement enregistrée demeure, si tu ne prends pas la précaution de vérifier si elle est bien isset ?

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 15/05/2010, 14h37
  2. Réponses: 6
    Dernier message: 15/11/2007, 14h52
  3. [C#] ArrayList dans une variable de session ?
    Par Oberown dans le forum ASP.NET
    Réponses: 1
    Dernier message: 12/12/2005, 16h50
  4. [C#] Tester existence d'une variable de session
    Par IDNoires dans le forum ASP.NET
    Réponses: 2
    Dernier message: 31/12/2004, 13h30
  5. Création d'une variable de session avec un ID
    Par PrinceMaster77 dans le forum ASP
    Réponses: 4
    Dernier message: 18/10/2004, 11h28

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