Problème de déconnexion

Résolu
Bonjour,
j'ai créer un système de connexion , tout marche nickel donc j'ai une page de connexion , pour y accéder on a un bouton Connexion en haut a droite. Sur ma page de connexion j'ai :
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Quad Dutch Clan - Joins us !</title>
<link rel="stylesheet" type="text/css" title="style" href="style.css"/>

</head>

<body>

<?php include("menu.php"); ?>

<?php

$bdd = new PDO ('mysql:host=localhost;dbname=connexion', 'root');

if(isset($_POST['connexion']))

{

$pseudo = addslashes($_POST["pseudo"]) ;

// Hachage du mot de passe
$pass_hache = sha1($_POST['password']);

// Vérification des identifiants
$req = $bdd->prepare("SELECT pseudo AND password FROM membres WHERE pseudo = '$pseudo' AND password = '$pass_hache' ");
$req->execute(array(
'pseudo' => $pseudo,
'password' => $pass_hache));

$resultat = $req->fetch();

if (!$resultat)
{
echo '<div class="mdp_id_error">Mauvais identifiant ou mot de passe !</div>';
}

else
{
session_start();
$_SESSION['pseudo'] = $pseudo;
echo 'Vous êtes connecté !';
}

}

if (isset($_SESSION['pseudo']))
{

}

else
{
echo
'<div class="connexion_case">
<form action="" method = "POST">
<label for="pseudo"> Pseudo : </label>
<input type="texte" name = "pseudo" class="connexion_formulaire_case"/>

<label for="password"> Password : </label>
<input type="password" name = "password" class="connexion_formulaire_case"/>
<br />
<button type="submit" name="connexion" class="connexion_button">Connexion</button>
</form>
<div>'
;
}

if(isset($_POST['deconnexion']))
{

session_start();

// Suppression des variables de session et de la session
$_SESSION = array();
session_destroy();

// Suppression des cookies de connexion automatique
setcookie('login', '');
setcookie('pass_hache', '');

}

?>

</body>

</html>


Donc la tout marche , la connexion marche nickel , on peut se connecter seul problème , une fois connecter le bouton connexion reste du coup j'ai rajouter ca sur la page PHP de mon menu ( que j'inclus après dans la page principale )
<div class="logo">
<div class="txt">QUAD DUTCH CLAN
<img src="separation.png" class="separation">
<ul>
<a href="index.php">HOME</a>
<a href="#">SHOP</a>
<a href="#">FORUM</a>
<a href="#">SERVER</a>
<a href="#">PLATOON</a>
</ul>
<img src="emblem.png" class="emblem">

<?php

if (isset($_SESSION['pseudo']))
{
echo '<a href="" class="deconnexion">Déconnexion</a>';
}
else
{
echo '<a href="connexion.php" class="connexion">Connexion</a>';
}
?>
<a href="inscription.php" class="inscription">Inscription</a>

</div>

</div>
Et donc ca marche quand on clique sa déconnecte mais le Connexion ne se transforme pas en Déconnexion pourtant j'ai mis
if (isset($_SESSION['pseudo']))
{
echo '<a href="" class="deconnexion">Déconnexion</a>';
}
else
{
echo '<a href="connexion.php" class="connexion">Connexion</a>';
}
?>


Voila donc en fait je cromprends pas pourquoi en fait ca marche pas et je cherche partout sans trouver de réponse..

2 réponses

  1. Hello, tu affiches ton bouton déconnexion si $_SESSION['pseudo'] existe, et si il existe pas tu affiche le bouton connexion.

    Si il n'y a aucun changement entre déconnexion et connexion cela veut dire que ta variable $_SESSION['pseudo'] n'est jamais créé ou est mal supprimée.

    ce que je te propose c'est d'afficher ce code à un endroit dans ta page
    echo '<pre>';
    print_r($_SESSION);
    echo '</pre>';
    


    Effectue l'action de te connecter et de te connecter et regarder l'état de pseudo dans ta variable $_SESSION.

    A+
    1. Salut,

      Je ne sais pas si tu as posté toute la page principale (celle avec les boutons de connexion/déconnexion).
      Mais dans ce que tu as posté il semble manquer un
      session_start();

      avant de pouvoir faire
        if (isset($_SESSION['pseudo'])) ...

      sinon la variable de session n'existera jamais.
      1. J'y ai pensé aussi , et je l'ai fait mais quand je le met le bouton déconnexion change bien mais lorsque je clique sur déconnexion rien ne se passe la session ne se détruit pas :/

        J'ai rajouté ceci :

         <?php 

        session_start();

        if (isset($_SESSION['pseudo']))
        {
        echo '<form action="" method = "POST"><a href="" class="deconnexion">Déconnexion</a></form>';
        }
        else
        {
        echo '<a href="connexion.php" class="connexion">Connexion</a>';
        }

        if(isset($_POST['deconnexion']))
        {

        session_start();
        // Suppression des variables de session et de la session
        $_SESSION = array();
        session_destroy();

        // Suppression des cookies de connexion automatique
        setcookie('login', '');
        setcookie('pass_hache', '');

        }

        ?>


        Mais la sa change en connexion/déconnexion mais quand on clique sur le déconnexion rien ne se passe
      2. Hello,

        j'ai pris l'habitude de ne pas faire de
        session_destroy()
        lors d'une déconnexion car j'utilise la variable session pour d'autre fonctionnalité de mes sites internet.

        Essaie cela :
        if(isset($_POST['deconnexion']))
        {
         // Suppression des variables de session et de la session
         unset($_SESSION['pseudo']);
         // Suppression des cookies de connexion automatique
         setcookie('login', '');
         setcookie('pass_hache', '');
        }
        
      3. Donc j'ai testé ca ne marche pas je récapitule pour que tout soit clair J'ai une lien <a href="connexion.php" class="connexion">Connexion</a> qui permet d'aller a la page de connexion quand on se connecte , le connexion en haut a droite doit se changer en déconnexion mais il doit rester cliquable donc j'ai mis <a href="" class="deconnexion">Déconnexion</a>

        et la fonction PHP de déconnexion :
        	if(isset($_GET['deconnexion']))
        {
        // Suppression des variables de session et de la session
        unset($_SESSION['pseudo']);
        // Suppression des cookies de connexion automatique
        setcookie('login', '');
        setcookie('pass_hache', '');
        }

        Sauf que la j'ai bien la connexion qui se fait , mais lorsqu'on est connecté il n'affiche pas le Déconnexion mais il affiche connexion et lorsque l'on reclique sur ce Connexion sa déconnecte l'utilisateurs ..
      4. Et si je met le session_start(); au début, il affiche bien le déconnexion mais impossible de se déconnecter il ne supprime pas la session..
      5. Si je résume :
        Au début de chaque pages :
        session_start();


        "Connecter" un utilisateur
        $_SESSION['pseudo']='unPseudoCommeUnAutre';


        Vérifier si un internaute est connecté
        if(isset($_SESSION['pseudo'])){
         // Connecté
        }else{
         // Pas connecté
        }
        


        Déconnecter un utilisateur
        unset($_SESSION['pseudo']);


        Afficher la variable $_SESSION pour débuger
        echo '<pre>';
        print_r($_SESSION);
        echo '</pre>';
        


        Si tu fais un print_r($_SESSION) tu devrais voir $_SESSION['pseudo'] quand l'utilisateur est connecté et tu ne devrais pas le voir quand personne n'est connecté.

        A+