Problème de déconnexion

Résolu
Bonjour,

Je n'arrive plus à me déconnecter de mon site...voici mon header.php :
<div class='header'>
<?php
 $result= infos_membre_connecte();

//-------------------------------------------------//
 
 $infos  = $result['result'];
if(count($infos)>0){
   $pseudo = isset($infos['pseudo'])?$infos['pseudo']:'';
   echo "Bienvenue ". $pseudo;
}else{
 echo "<br> Aucun résultat.";
}
if(!isset($_SESSION['pseudo']))
{
header("Location:index.php?page=login");
}
?>
<p><a href="index.php?page=logout">Se déconnecter</a></p>
</div>


Merci d'avance :)

4 réponses

Résumé de la discussion

Le problème central concerne une impossibilité de se déconnecter, lié à un header PHP qui affiche le pseudo et effectue une redirection vers la page de connexion. Plusieurs réponses proposent de vérifier l’ordre des chargements et la gestion des sessions dans l’index et le header, afin que la déconnexion n’entre pas en conflit avec les redirections. Des échanges techniques évoquent aussi des erreurs comme des fichiers manquants ou mal nommés et préconisent d’assurer l’initialisation de la session avant toute destruction ou redirection. En pratique, la bonne approche consiste à gérer l’initialisation des sessions et à éviter que des données soient perdues lors des appels de redirection, afin d’obtenir une déconnexion fiable.

Bobot (l’IA à votre service)
  1. Quel est le code de ta page index.php?page=logout ?
    0
    1. <?php
      session_destroy();
      header("Location: index.php?page=login")
      ?>
      0
    2. As-tu changer quelque chose pour que ça s'arrête de fonctionner ?
      0
    3. depuis que j'ai modifié l'index.php
      0
    4. Et qu'as tu changer ?
      0
  2. if(isset($_SESSION['pseudo']) && $page != 'membre' && $page != 'update' && $page !='update_avatar' && $page !="liste_membre"){
    redirection("index.php?page=membre");
    
    }
    ?>


    voilà, plus clair ici : https://forums.commentcamarche.net/forum/affich-32077373-renomme-probleme-de-redirection-en-boucle
    0
    1. Pour commencer,
      Il manque un point virgule après la redirection sur la page logout
      0
    2. C'est rajouté mais rien n'a changé :/
      0
    3. Montre ta page de connexion stp
      0
    4. Tu peux simplifier ce code :
      if(isset($_SESSION['pseudo']) && $page != 'membre' && $page != 'update' && $page !='update_avatar' && $page !="liste_membre"){
      redirection("index.php?page=membre");
      
      }

      en utilisant la fonction in_array qui teste si un élément est dans un array :
      if(isset($_SESSION['pseudo']) && !in_array($page, array( 'membre', 'update', 'update_avatar', "liste_membre"))){
      redirection("index.php?page=membre");
      
      }
      0
    5. connect.php ?

      <?php
      /**
      * Fichier connect.php
      **/
      
      //--------------------------------//
      //démarrage de session
      //--------------------------------//
      if(session_id() == '') {
       session_start();
      }
      
      //--------------------------------//
      // Infos de connexion à la BDD
      $serveur = "localhost";
      $user = "root";
      $pwd = "";
      $dbname = "rs";
      //--------------------------------//
      // Connexion
      //--------------------------------//
      try {
        $bdd = new PDO ("mysql:host=".$serveur.";dbname=".$dbname.";charset=utf8", $user,$pwd);
      }catch(Exception $e) {
        die('Erreur de connexion à la BDD '.$e->getMessage());
      }
      
      ?>


      modifications faites sinon ^^ merci
      0
  3. Modérateur
    Bonjour,

    En complément de la suggestion d' hharchi (que je salue au passage) ...
    je propose :

    page lougout.php
    <?php
    
    //Le temps des tests :
    echo "<br> Sessions AVANT le destroy";
    print_r($_SESSION); // avant le session_destroy
    
    session_destroy();
    //header("Location: index.php?page=login")
    
    
    //Le temps des tests :
    echo "<br> Sessions APRES le destroy";
    print_r($_SESSION); // aprèsle session_destroy
    
    ?>
    


    ... par contre ... ce code (ou l'ancien;. qui faisait la même chose...)
    if(isset($_SESSION['pseudo']) && !in_array($page, array( 'membre', 'update', 'update_avatar', "liste_membre"))){
    redirection("index.php?page=membre");
    }
    

    fait en sorte que JAMAIS tu n'iras dans la page LOGOUT .... car ... si la page se nomme lougout... elle ne fait donc pas partie de la liste... et donc... tu es TOUT LE TEMPS redirigé vers la page membre....
    Quel est le but de ce bout de code au juste ? A mon avis .... c'est inutile de le mettre.

    Cordialement,
    Jordane
    0
    1. Je te remercie pour ton aide précieuse :)
      je n'arrive toujours pas à me déconnecter malgré ces modifs, je clique et je ne suis pas redirigé
      0
    2. Salut tout le monde :)

      Tu n'es pas redirigé vers ta page logout ?? As-tu bien modifié la condition dont parle jordane ?
      0
    3. oui :/
      0
    4. oui pour quoi ?
      0
    5. @hharchi9J'ai appliqué les modifs que Jordane m'a apporté
      0
  4. <?php
    include('functions/connect.php');  // fonctionne
     
    // Reporte toutes les erreurs PHP (Voir l'historique des modifications)
    error_reporting(E_ALL);
     
     
    /**
    *Fonction de redirection
    * @param : $url (valeur par défaut = index.php?page=login )
    */
    function redirection($url = "index.php?page=login"){
       header("Location:$url");
       exit();
    }
     
    //Récupération de la valeur de $_GET['page'] Si la variable Existe et qu'elle n'est pas vide...
    $page = isset($_GET['page']) && !empty($_GET['page'])?$_GET['page']:NULL;
     
    include('functions/'.$page.'.func.php');
     
     
    if($page){    
        $content = "pages/$page.php";
        if(!file_exists($content)){
          //La page n'existe pas
          redirection();
        }
    }else{
      // $page est vide ou n'existe pas.
       redirection();
    }
    if(isset($_SESSION['pseudo']) && !in_array($page, array( 'membre', 'update', 'update_avatar', "liste_membre"))){
    redirection("index.php?page=membre");
    }
    ?>
     
    <!DOCTYPE html>
    <html>
        <head>
          <link rel='stylesheet' href='css/style.css'>
        </head>
        <meta charset="UTF-8" >
        <body>
              <div id='content'>
              <?php
                  include($content);
               ?>
        </div>
        </body>
    0
    1. Modérateur
      Tu n'as rien modifié !
      Tu fais quoi de ça ?
      if(isset($_SESSION['pseudo']) && !in_array($page, array( 'membre', 'update', 'update_avatar', "liste_membre"))){
      redirection("index.php?page=membre");
      }
      

      ????

      Tu as lu ce que je t'ai marqué à ce sujet ????????
      0
    2. Change ça :

      if(isset($_SESSION['pseudo']) && !in_array($page, array( 'membre', 'update', 'update_avatar', "liste_membre"))){
      redirection("index.php?page=membre");


      en :

      if(isset($_SESSION['pseudo']) && !in_array($page, array( 'membre', 'update', 'update_avatar', "liste_membre", 'logout'))){
      redirection("index.php?page=membre");
      0
    3. @jordane45Oui j'ai lu mais je croyais que vous l'aviez déjà fait je m'excuse
      0
    4. @jordane45
      if(isset($_SESSION['pseudo']) && !in_array($page, array( 'membre', 'update', 'update_avatar', "liste_membre", "logout"))){
      redirection("index.php?page=membre");
      }


      c'est bon comme ceci ?
      0
    5. oui
      0