Transmission de variables de session

alex82 -  
 alex82 -
Bonjour,

Je n'arrive pas à transmettre les variables de session initialisées dans mon script aux autres pages de mon code. J'ai pourtant mis session_start(); en début de script ainsi qu'en début de script des autres pages mais rien ne se transmet!

Quelqu'un pourrait-il m'aider?


Merci d'avance,

Voici mon script :


<?php 
session_start(); 
?> 

<div class="contenu2" style="height:250px;"> 
<?php 


//TABLES DE LA BASES DE DONNEE 
include('./tables.php'); 

//Fonction de connexion à la BDD 
include('./connexion_bdd.php'); 



// On démarre une session en récupérant $_SESSION['authen'], qui vaut NULL si //l'utilisateur n'est pas encore connecté ou 
// s'il a fait un essai infructueux, et vaut 'OK' s'il est connecté.  

// Un formulaire de connexion est décrit dans les bornes EOF suivantes. 
// $tableau est appelé dans un printf plus loin. 

$tableau = <<<EOF 
<div style="position:relative;width:50%;left:20%;"> 
<table> 
<form method="post" action="" name="formulairesession">  
 <tr> 
  <td width=150><font face="Arial" size="2">Nom d'utilisateur :</font></td> 
  <td><input type="text" name="pseudo_membre"></td> 
 </tr> 
 <tr> 
  <td width=150><font face="Arial" size="2">Mot de passe :</font></td> 
  <td><input type="password" name="passe_membre"></td> 
 </tr> 
 <tr> 
  <td colspan=2 align="right"><input type="submit" name="Submit" value="Se connecter"></td> 
 </tr> 
 <input type="hidden" name="flag" value="1"> 
</form> 
</table> 
</div> 
EOF; 


if (isset($_POST['pseudo_membre'])){ 
  $nom=$_POST['pseudo_membre']; 
} else{ 
  $nom=''; 
} 


if (isset($_POST['passe_membre'])){ 
  $mp=$_POST['passe_membre']; 
} else{ 
  $mp=''; 
} 


if (isset($_SESSION['authen'])){ 
  $authen=$_SESSION['authen']; 
} else{ 
  $authen=''; 
} 


// PREMIER CAS : AFFICHAGE DU FORMULAIRE $tableau SI L'UTILISATEUR N'EST PAS CONNECTE 

if ($authen!='OK') { 
 echo'<div style=\"text-align=center;\"><br/> 
 <p>Veuillez saisir l\'identifiant et le mot de passe administrateur</p>'; 
  
 if (!isset($_POST['flag']) || $authen!='OK') echo $tableau;// On affiche le formulaire de connexion 
 echo'</div>'; 
 $row=array(); 
 $requete4="SELECT * from $base4 where login='".$nom."' and mdp='".$mp."'"; 
 $row=connexion_bdd($requete4); 


  // Cas 1: $row est vide (pas de correspondance) 
  if ($row[0]['login'] == NULL or $row[0]['mdp'] == NULL){ 
   $_SESSION['authen']=NULL; 
   print("<h2 class=\"error\">Vous êtes déconnecté <br/>Vérifiez que tous les champs soient bien remplis</h2>"); 
   
  // Cas 2: $row contient les deux éléments 
  } else { 
   $_SESSION['authen']='OK'; // On est connecté 
   print("<h3>Vous êtes connecté</h3>"); 
   echo "<a href=\"./index.php?note=3\">accueil:cliquez ici</a>"; 
  } 

} // Fin du if 



// DEUXIEME CAS : L'UTILISATEUR EST DEJA AUTHENTIFIE CORRECTEMENT 

else {  
 // Premier cas : la session est terminée (clic sur le bouton déconnexion) 
 if (isset($_POST['fin_session'])) {  
  print ("<h3 style=\"margin-top:100px;\"> Vous êtes déconnecté </h3>"); 
  echo "<p><a href=\"./index.php?note=3\">Revenir à la page de gestion</a></p>"; 
  session_destroy(); 
  $_SESSION['authen']==NULL; 
   
 // Deuxième cas : on affiche les liens (icones) vers la gestion des caméras et des paramètres ainsi que le changement de mot de passe 
 } else { 
  // Affichage des deux icones renvoyant aux caméras et aux paramètres 
  echo "  
  <div style=\"position: absolute; left:25%; width:15%; text-align:center;\" > 
   <a href=\"./menucams.php\">  
   <img src=\"./images/gestionwm.bmp\" alt=\"cameras\" title=\"cameras\" style=\"width:100px\"/> 
   </a> 
   <p class=\"legende\">lien vers les pages caméras</p> 
  </div> 


  <div style=\"position: absolute; left:60%; width:15%;\" > 
   <a href=\"./menuparametres.php\"> 
   <img src=\"./images/gestionpm.bmp\" alt=\"parametres\" title=\"parametres\" style=\"width:100px\"/> 
   </a> 
   <p class=\"legende\">lien vers les paramètres</p> 
  </div>"; 

  //Affichage du lien indiquant le changement de mot de passe 
  echo"<!-- Changement de mdp --> 
  <p style=\"position: relative; text-align:center; top:80%;\">Pour changer login et mot de passe 
  <a href=\"./changer_mdp.php\">cliquez ici</a> 
  </p> 
  <br/><br/><br/><br/><br/>"; 

  // Bouton de déconnexion 
  echo"<form class=\"centrebouton\" action=\"\" method=\"post\"> 
<p><input type=\"submit\" name=\"fin_session\" value=\"déconnexion\" /></p> 
</form>"; 


 }  

} 

?> 

</div>

4 réponses

mpmp93 Messages postés 6648 Date d'inscription   Statut Membre Dernière intervention   1 340
 
Bonjour,

S'il y a du code avant ça:

<?php
session_start();
?>

qui envoie des caractères, ça ne marchera pas...

Ce code:

<?php
session_start();
?>


Doit être en début de script php, exemple:

<?php
session_start();
?>
<html>
<head>
..........reste de la page.....

0
alex82
 
Bonjour,

Justement, il n'y a pas de code avant le session_start();
J'ai essayé avec un code basique mais les variables de session
ne se transmettent toujours pas...
Je ne vois pas d'où ça peut venir?

Merci.
0
mpmp93 Messages postés 6648 Date d'inscription   Statut Membre Dernière intervention   1 340
 
Bonjour,

Pas de code????

ATTENTION, le moindre caractère espace est un 'code':

  <?php


c'est pas comme:

<?php


car si je fais précéder <?php de seulement un espace ou un retour à la ligne, c'est mort pour session_start();

A+
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Bonjour,

Est-ce que tu as un message d'erreur ?
Essaie de rajouter à quelques endroits stratégiques dans ton code la ligne suivante :
var_dump($_SESSION);
qui t'affichera le contenu de la session en cours.

Autre piste : tes pages sont-elles encodées en UTF-8 ? Avec ou sans les BOM ? Car l'UTF-8 contient quelques caractères en en-tête du fichier (les BOM) qui ne sont pas affichés par l'éditeur de texte, mais qui sont considérés par PHP comme du texte à transmettre au client ; ce qui va donc débuter la génération de la page, les en-têtes HTTP et tout ce qui fait que session_start() ne pourra pas être exécuté.

Xavier
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Une dernière piste :
vérifie ton php.ini, et plus particulièrement le paramètre session.auto_start
En effet, si ce paramètre vaut 1, une session est automatiquement lancée au début de chaque page. Du coup, cela signifie que quand tu fais des session_start(), tu écrases la session en cours, car elle était déjà ouverte !
Donc, si ce paramètre vaut 1, il faut enlever les session_start() (ou passer le paramètre à 0)
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Toutes mes excuses : tu peux ignorer le commentaire précédent.
D'après la doc officielle PHP :
« A partir de PHP 4.3.3, appeler session_start() après qu'une session sois déjà démarrée émettra une erreur E_NOTICE. De plus la deuxième session démarrée sera tout simplement ignorée. »

Donc ce problème n'est plus d'actualité depuis... Php 4.3.3. Je me fais vieux.
0
alex82
 
Re-bonjour,

Non je n'ai pas de message d'erreur, simplement à chaque fois que la page se recharge, c'est comme si c'était la première fois qu'elle se chargeait, on dirait qu'elle ne garde pas en mémoire les variables de session.

J'ai essayé de mettre var_dump($_SESSION); un peu partout dans le code et ça montre bien que la session ne se transmet pas!

Pourtant avec la version PHP 5.2.0 ça marche mais pas avec la version PHP 4.3.9 (la mienne). J'ai bien vérifié, il n'y a aucun caractère avant le session_start();
0