Problème de déconnexion [Résolu/Fermé]

Signaler
Messages postés
109
Date d'inscription
samedi 3 mai 2014
Statut
Membre
Dernière intervention
17 mars 2017
-
Messages postés
109
Date d'inscription
samedi 3 mai 2014
Statut
Membre
Dernière intervention
17 mars 2017
-
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


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+
Messages postés
97
Date d'inscription
mardi 23 juin 2015
Statut
Membre
Dernière intervention
28 juin 2017
42
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.
Messages postés
109
Date d'inscription
samedi 3 mai 2014
Statut
Membre
Dernière intervention
17 mars 2017
5
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..
Utilisateur anonyme
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+
Messages postés
109
Date d'inscription
samedi 3 mai 2014
Statut
Membre
Dernière intervention
17 mars 2017
5
Bonjour , si je mets le session start au début de chaque page alors la il est directement connecté en fait la session démarre uniquement quand je me connecte , donc si je la démarre au début je suis directement connecté O_o Et si je le démarre quand l'utilisateur se connecte , il m'affiche l'erreur " Undefined variable: _SESSION in C:\wamp\www\tests\menu.php on line 26"

J'avoue que je ne comprend plus rien :/
Utilisateur anonyme
Okok, j'ai compris ce que tu n'as pas compris (c'est déjà pas mal ;) )

En fait, les fonctions session_start() et session_destroy() ne doivent pas être utilisées pour la connexion de l'utilisateur.

session_start();
permet d'initialiser la variable $_SESSION
session_destroy();
permet de vider et de supprimer la variable $_SESSION

Que l'utilisateur soit connecté ou déconnecté, le
session_start();
doit être appelé en début de chaque page et le
session_destroy();
si besoin.

Car au final, ta variable $_SESSION peut être utilisée pour l'authentification de l'utilisateur mais aussi pour la gestion d'un panier (ecommerce) ou pour sauvegarder temporairement des informations tiers.

Au final, tu va jouer sur l'existence ou non d'une entrée de $_SESSION pour définir si l'utilisateur est connecté ou non.

Exemple :
session_start(); // Appelé sur toutes mes pages

function login($username,$password){
 // Vérifier suivant $username/$password si l'utilisateur est bien connecté
 // $username,$password correct on rempli l'entrée user de $_SESSION
 $_SESSION['user'] = [
       'id' => $user_id,
       'username' => $username,
       'date_connection' => time()
 ];
 return isLogged();
}
function logout(){
 // On vide l'entrée user de $_SESSION
 $_SESSION['user'] = [];
 return true;
}
function isLogged(){
 if(empty($_SESSION['user'])){
      // l'entrée user de $_SESSION est vide, l'utilisateur n'est donc pas connecté
      return false;
 }else{
      // l'entrée user de $_SESSION n'est pas vide, l'utilisateur est donc connecté
      return true;
 }
}
Messages postés
109
Date d'inscription
samedi 3 mai 2014
Statut
Membre
Dernière intervention
17 mars 2017
5
Oui je me suis rendu compte aussi que mon erreur c'est que je ne mettait pas session_start au début et du coup ca marche maintenant il ne me reste plus qu'a modifier avec css pour que tout sois nickel. Par contre ce n'est pas du java donc ca ne détecte pas directement il faut relancer la page pour le connexion se change en deconnexion donc j'ai fait une redirection avec ?log_in et ?log_out :D