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 :

Perte de variables dans une session SSL


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de linar009
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    497
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 497
    Points : 323
    Points
    323
    Par défaut Perte de variables dans une session SSL
    Bonjour,

    J'ai un petit souci avec mon site PHP :
    Lorsque que je le faisais tourner en HTTP classique : aucun problème.
    Depuis que je l'ai passé en SSL (sécurisé), mes variables php se perdent à chaque chargement de nouvelle page.
    Je ne comprends pas pourquoi, surtout que lorsque je regarde l'ID de ma session à chaque ouverture de page il est identique à chaque fois.

    Voici un extrait de mon code PHP:
    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
    <?php
    session_start();
    
    $erreur = '';
    
    if ($act == 'valid'){
      $sql  = "......";
      $res = pg_fetch_array(pg_query($sql));
      if ($res['niveau'] == ''){
           $erreur = 'Login ou mot de passe incorrect';
      }else{
           $_SESSION['member_login'] = $login;    
           echo "<script>location.href='index2.html'</script>";
       }
    }else{
      echo "<script>if (self != top)top.location.href='';</script>";
      session_unset();
      session_destroy();
    }
    ?>
    Le problème est que la valeur de ma variable $act est perdue à chaque fois, donc le script passe toujours par la partie en rouge.

    Et voici la partie HTML de ma page:
    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
    36
    37
    38
    39
    <HTML>
    <HEAD>
    <META content="text/html; charset=windows-1252" http-equiv=Content-Type>
    <META HTTP-EQUIV="Expires" CONTENT="0">
    <LINK href="class-style/ie4v2.css" rel=stylesheet type=text/css></link>
    <STYLE media="screen" type="text/css">
    </STYLE>
    </HEAD>
    <BODY onload='form1.login.focus();'>
    <DIV id=layer2>
    <DIV id="overDiv" style="position:absolute; visibility:hidden; z-index:1000;"></div>
    <CENTER>
    <FORM name='form1' ACTION='<?php echo $PHP_SELF; ?>' METHOD=POST>
      <INPUT TYPE='hidden' NAME='act' VALUE='valid'>
     
      <TABLE  style='table-layout:fixed' class='std' cellspacing='0'>
        <COLGROUP>
        <COL width='170'>
        <COL width='170'>
        <TR>
          <TH class='left' colspan=2>Identification</TH>
        </TR>
        <TR>
          <TD class='left'>Identifiant : </TD>
          <TD><INPUT TYPE='text' SIZE=30 NAME='login'></TD>
        </TR>
        <TR>
          <TD class='left'>Mot de passe : </TD>
          <TD><INPUT TYPE='password' SIZE=30 NAME='passe'></TD>
        </TR>
        <TR>
          <TD class='left' colspan=2 style='TEXT-ALIGN:center'><input type='image' src='images/b_valid.gif'></TD>
        </TR>
      </TABLE>
    </FORM>
    <FONT COLOR='#FF0000'><?php echo $erreur; ?></FONT>
    </CENTER>
    </BODY>
    </HTML>
    J'espère avoir été clair.

    Merci par avance.

  2. #2
    Membre averti Avatar de linar009
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    497
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 497
    Points : 323
    Points
    323
    Par défaut
    Je tiens à préciser également que je suis passé de la version 4 à 5 de PHP. Mais normalement les scripts PHP4 sont entièrement compatibles avec la version 5 ...

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Je ne comprends pas d'où sort la variable $act : si c'est une variable de session c'est $_SESSION['act'] qui doit être utilisé. Votre test deviendrait ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (isset($_SESSION['act']) && $_SESSION['act'] == 'valid') {

    Cordialement, Julp.

  4. #4
    Membre averti Avatar de linar009
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    497
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 497
    Points : 323
    Points
    323
    Par défaut
    Citation Envoyé par julp
    Je ne comprends pas d'où sort la variable $act : si c'est une variable de session c'est $_SESSION['act'] qui doit être utilisé. Votre test deviendrait ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (isset($_SESSION['act']) && $_SESSION['act'] == 'valid') {
    Non ce n'est pas une variable de session, c'est une variable résultant d'un type input caché :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <FORM name='form1' ACTION='<?php echo $PHP_SELF; ?>' METHOD=POST>
      <INPUT TYPE='hidden' NAME='act' VALUE='valid'>

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Citation Envoyé par linar009
    Non ce n'est pas une variable de session, c'est une variable résultant d'un type input caché :
    Dans ce cas il faut utiliser le tableau super global $_POST et la condition deviendrait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (isset($_POST['act']) && $_POST['act'] == 'valid') {
    Vous programmez avec les register_globals à On (cf phpinfo) ?


    Julp.

  6. #6
    Membre averti Avatar de linar009
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    497
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 497
    Points : 323
    Points
    323
    Par défaut
    Citation Envoyé par julp
    Vous programmez avec les register_globals à On (cf phpinfo) ?
    Oui aucun souci j'ai bien positionné le register_global à ON dans mon php.ini.
    Mais pourriez-vous me dire pourquoi cela fonctionnait avant et plus maintenant ?
    Je ne pense pas qu'il s'agisse d'un problème de passage par le tableau $_POST

    J'ai une info supplémentaire pour vous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /baseweb/top.php:1) in /baseweb/www/page.php on line 3
    En tout cas merci pour votre aide.

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Citation Envoyé par linar009
    J'ai une info supplémentaire pour vous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /baseweb/top.php:1) in /baseweb/www/page.php on line 3
    Cette erreur vous informe que vous envoyez des données au client (texte, HTML, ...) avant d'envoyer/modifier les en-têtes HTTP. Cette erreur est abordée par la FAQ PHP. En gros, session_start() doit être placé en tout tout début de script. Le code HTML donné ci-dessus précède-t-il le code PHP donné également ci-dessus ?

    Si vous passez dans le else, je doute que ce soit lié aux sessions en elles-mêmes sauf éventuellement leur configuration (voir le tutoriel donné ci-dessous).

    Note :
    • La fonction session_unset est dépréciée voir l'article concernant les sessions.
    • Il est recommandé de mettre les register globals à Off



    Cordialement, Julp.

  8. #8
    Membre averti Avatar de linar009
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    497
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 497
    Points : 323
    Points
    323
    Par défaut
    ok merci pour toutes ces informations !

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

Discussions similaires

  1. [Débutant] Perte de variable dans une boucle while
    Par Chris.G dans le forum MATLAB
    Réponses: 2
    Dernier message: 17/05/2012, 18h31
  2. [PHP 5.0] Détruire des variables dans une session
    Par hraiwen dans le forum Langage
    Réponses: 5
    Dernier message: 08/01/2010, 13h39
  3. Valeur d'une variable dans une Session
    Par sysinfo33 dans le forum Struts 1
    Réponses: 4
    Dernier message: 30/06/2006, 11h53
  4. Réponses: 7
    Dernier message: 15/05/2006, 13h36
  5. [Sécurité] Variables dans une session
    Par philippef dans le forum Langage
    Réponses: 6
    Dernier message: 14/10/2005, 16h30

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