Mon authentification PHP5 ne fonctionne pas.

Fermé
Aprexia Messages postés 82 Date d'inscription vendredi 17 décembre 2010 Statut Membre Dernière intervention 14 mai 2013 - Modifié par Aprexia le 29/09/2011 à 10:30
dariumis Messages postés 571 Date d'inscription mardi 16 mars 2010 Statut Membre Dernière intervention 18 avril 2018 - 30 sept. 2011 à 15:51
Bonjour,
Lorsque je me connecte grâce à mon formulaire d'authentification, cela fonctionne.
Lorsque je me déconnecte, cela fonctionne aussi.
Mais lorsque je clique sur page suivante, je suis déconnecté.

print_r($_SESSION['Auth']) me montre que ma variable de session reste vide. Ce qui me parait bizarre puisque lorsqu'elle est vérifiée dans isLogged() elle est bien remplie.

Comment se fait-il que cette variable se réinitialise à chaque chargement de mon index?

model/User.php
static function isLogged(){ 
   if(isset($_SESSION['Auth']) && isset($_SESSION['Auth']['login'])){ 
    extract($_SESSION['Auth']); 
    try{ 
     $Mysql = new Mysql(); 
     $Resulats = $Mysql->TabResSQL("SELECT * FROM users WHERE login='".$login."' AND pass='".md5($pass)."'"); 
      
     foreach ($Resulats as $Valeur) { 
      return true;  
     } 
     return false; 
    } 
    catch (MySQLExeption $e) { 
     echo $e -> RetourneErreur(); 
    } 
   } 
   return false; 
  } 

  static function levelZone(){ 
   if(isset($_SESSION['Auth']) and isset($_SESSION['Auth']['login']) and isset($_SESSION['Auth']['pass'])){ 
    extract($_SESSION['Auth']); 
    try{ 
     $Mysql = new Mysql(); 
     $Resulats = $Mysql->TabResSQL("SELECT login, pass, level FROM users WHERE login='".$login."' AND pass='".md5($pass)."'"); 
      
     foreach ($Resulats as $Valeur) { 
      return $Valeur['level'];  
     } 
     return false; 
    } 
    catch (MySQLExeption $e) { 
     echo $e -> RetourneErreur(); 
    } 
   } 
   return false; 
  } 




controller.php
function verifAuth(){   
  if(!isset($_SESSION['Auth'])){ 
   echo '1: $_SESSION[\'Auth\'] n\'existe pas <br/>'; 
   initAuth(); 
   return false; 
  } 
  else{ 
   print_r($_SESSION['Auth']); 
   if($_SESSION['Auth']['login'] != ''){ 
    echo 'Connexion 2. <br/>'; 
    return true; 
   } 
   else{ 
    if(!isset($_POST['login']) || !isset($_POST['pass'])){ 
     echo 'Veuillez entrer un login et un mot de passe. <br/>'; 
     return false; 
    } 
    else{ 
     $_SESSION['Auth']['login'] = $_POST['login']; 
     $_SESSION['Auth']['pass'] = $_POST['pass']; 

     if(User::isLogged()){ 
      switch(User::levelZone()){                
       case 0: 
        $_SESSION['Auth']['level'] = 'Membre'; 
        break; 
       case 1: 
        $_SESSION['Auth']['level'] = 'Administrateur'; 
        break; 
      } 
      foreach(User::select($_SESSION['Auth']['login']) as $User){ 
       $_SESSION['Auth']['pseudo'] = $User['pseudo']; 
      } 
      echo 'Connexion 1. <br/>'; 
      return true; 
     } 
     else{ 
      echo 'Le login et le mot de passe ne correspondent pas. <br/>'; 
      initAuth(); 
      return false; 
     } 
    } 
   } 
  } 
 } 
  
 function initAuth (){ 
  $_SESSION['Auth'] = array( 
   "login"   =>'', 
   "pass"    =>'', 
   "pseudo"  =>'', 
   "level"   =>'' 
  ); 
 } 
  
 function logOut (){ 
  session_destroy(); 
  header('location: '.getServerRoot().'/index.php'); 
  exit; 
 } 


view.php
<?php 
 if (!verifAuth()){ 
  ?> 
  <h1>Connexion</h1> 
  <form method="post" action="<?php getIncludesFolder()."view/view.php"?>"> 
   <p>Login: <input type="text" name="login"></p> 
   <p>mot de passe: <input type="password" name="pass"></p> 
   <p><input type="submit" name="connexion" value="Connexion"></p> 
  </form> 
  <?php 
 } 
 else{ 
  require(getThemeCourant().'/index.php'); 
 } 
?> 


et enfin, index.php
<?php  
 include('config.php'); 
  
 if(!isset($_SESSION)){ 
  echo'Pas de session <br/>'; 
  session_start(); 
 } 
  
 include(getIncludesFolder().'controller/'.'controller.php'); 
 include(getIncludesFolder().'view/'.'view.php'); 
?> 



3 réponses

dariumis Messages postés 571 Date d'inscription mardi 16 mars 2010 Statut Membre Dernière intervention 18 avril 2018 63
29 sept. 2011 à 13:28
j'ai pas lu tous tes code, mais tu pense bien à démarrer tes session: session_start en première ligne de code??
0
Aprexia Messages postés 82 Date d'inscription vendredi 17 décembre 2010 Statut Membre Dernière intervention 14 mai 2013 24
29 sept. 2011 à 18:50
oui le session_start est la 1ere ligne.

le problème cest qu'elle se vide quand je change de page.
0
dariumis Messages postés 571 Date d'inscription mardi 16 mars 2010 Statut Membre Dernière intervention 18 avril 2018 63
30 sept. 2011 à 15:51
je pense que ça c'est pas bon:

if(!isset($_SESSION)){ 
  echo'Pas de session <br/>'; 
  session_start(); 
 } 


je pense qu'on ne peut pas tester l'existence d'une session avant de l'avoir démarré ...
0