Problème de déconnexion
RésoluZakarya93 Messages postés 1026 Statut Membre -
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
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.
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
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");
}
<?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
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
<?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>
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");
<?php session_destroy(); header("Location: index.php?page=login") ?>