prepare('SELECT id, username, password, role FROM users WHERE username = :username LIMIT 1'); $stmt->execute([':username' => $username]); $user = $stmt->fetch(); } catch (PDOException $e) { error_log('Erreur sql dans la requête : ' . $e->getMessage()); header('Location: ./../pages/login.php'); exit; } // On regarde si le mdp correspond à celui en bdd if (!$user || !password_verify($password, $user['password'])) { // Log Discord : tentative de connexion échouée (utile pour repérer le bruteforce) sendLog("Tentative de connexion échouée avec l'identifiant : " . $username); header('Location: ./../pages/login.php'); exit; } // Régénère l'ID de session à la connexion : empêche la fixation de session // (un attaquant qui aurait imposé un ID de session à la victime avant sa // connexion ne peut plus récupérer une session authentifiée avec cet ID) session_regenerate_id(true); // Si la connexion est ok, on entregistre l'utilisateur dans $_SESSION $_SESSION['user_id'] = $user['id']; $_SESSION['username'] = $user['username']; $_SESSION['role'] = $user['role']; // Date de connexion mise à jour try { $stmt = $dbh->prepare('UPDATE users SET last_login = NOW() WHERE id = :id'); $stmt->execute([':id' => $user['id']]); } catch (PDOException $e) { error_log('Le serveur WEB ne peut pas modifier la date de dernière connexion : ' . $e->getMessage()); } // Log Discord : connexion réussie sendLog("Connexion réussie", $user['username']); //Redirection vers home.php puisque que l'utilisateur est forcément connecté // (?login=1 déclenche la notification "Connexion réussie" sur la page) header('Location: ./../pages/home.php?login=1'); exit; ?>