Bonjour,
Je rencontre un petit problème avec mon code.
J'essaie de mettre en place un système de vérification de connexion, avec changement du boutton de connexion si l'utilisateur est connecté et redirection du BO s'il n'est pas connecté. J'initie la variable de vérification dans la fonction de connection, sauf qu'il semble qu'il perde la valeur true une fois connecté et dans le BO et pourtant le boutton de connexion est bien sur deconnexion. Et quand je navigue sur d'autres pages les variables $_SESSION sont conservées sauf celle-ci.
function logmein(array $user): array{
if (session_status()===PHP_SESSION_NONE):
session_start();
endif;
require 'pdo.php';
$u_log = $user[0];
$u_pass = $user[1];
$req = $bdd->prepare("SELECT log_in, u_password, id_role, last_login FROM users WHERE log_in = :log_in AND u_password = :u_password");
$req->execute(array(
'log_in' => $u_log,
'u_password' => $u_pass,
));
$finduser= $req->fetch();
if(!empty ($finduser)){
$_SESSION['user_role']=$finduser[2];
$_SESSION['user_last_log']=$finduser[3];
$_SESSION['user_connected']=true;
date_default_timezone_set('Europe/Paris');
$date = date("Y-m-d H:i:s");
$req_update = $bdd->prepare('UPDATE users SET last_login = :last_login WHERE log_in = "'.$u_log.'"');
$req_update->bindParam(':last_login', $date, PDO::PARAM_STR);
$req_update->execute();
return [true, $finduser[2], $finduser[3]];
}else{
return [false, $finduser[2], $finduser[3]];
};
$finduser->closeCursor();
};
<?php
if (session_status()===PHP_SESSION_NONE):
session_start();
endif;?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Mon blog</title>
<link rel="stylesheet" href="/css/header.css">
<link rel="stylesheet" href="/css/mains.css">
</head>
<body>
<div class="header">
<img src="/img/banner2.jpg" alt="">
</div>
<div class="navbar">
<div class="home">
<a href="index.php">Accueil</a>
</div>
<div class="learning">
<a href="#">TP</a>
<div class="sub-menu">
<div>
<a href="#">HTML/CSS</a>
</div>
<div>
<a href="#">PHP</a>
</div>
<div>
<a href="#">JS</a>
</div>
</div>
</div>
<div class="resume">
<a href="#">Parcours</a>
</div>
<div class="connection">
<?php if($_SESSION['user_connected'] === true):?>
<a href="index.php"><?php $_SESSION['user_connected']=false?>Déconnexion</a>
<?php else: ?>
<a href="userConnection.php">Connexion</a>
<?php endif ?>
</div>
</div>
</body>
</html>
Array ( [user_role] => 1 [user_last_log] => 2021-03-05 21:32:45 [user_connected] => )
Pourquoi tu passes ta $_SESSION['user_connected']=false;
directement après ton if($_SESSION['user_connected'] === true)
?
Du coup, dés que ton membre est connecté ta variable vaut "false" en fin de "index.php". Donc, je me demande si tu ne fais pas un traitement sur ta session dans un autre fichier dans le cas ou $_SESSION['user_connected']=false;
?
Bonjour,
Alors effectivement ça vient de là. Ce que je souhaite faire c'est sur le lien de deconnexion, la valeur de $_SESSION['user_connected'] passe à false quand l'utilisateur appuye dessus. Je pense que je dois mal m'y prendre.
Edit:
C'est bon je suis passé par un fichier PHP intermédiaire pour passer la valeur à FALSE. Je te remercie.
Et pour ceux qui souhaite savoir le code que j'ai mis.
<?php
if (session_status() === PHP_SESSION_NONE):
session_start();
endif;
if($_SESSION['user_connected'] === true):
$_SESSION['user_connected'] = false;
header('Location: index.php');
exit();
else:
header('Location: index.php');
exit();
endif;
Normalement si ton utilisateur clique sur déconnecter tu dois faire ton traitement dans le controller. Effectivement si tu n'as pas de controller, un fichier intermédiaire fera l'affaire.