$duree, "path" => "/", "httponly" => true, "samesite" => "Lax", "secure" => false ]); session_start(); } public function connecter(array $utilisateur): void { session_regenerate_id(true); $_SESSION[self::CLE_UTILISATEUR] = $utilisateur["id"]; } public function deconnecter(): void { $_SESSION = []; if (ini_get("session.use_cookies")) { $params = session_get_cookie_params(); setcookie( session_name(), "", time() - 42000, $params["path"], $params["domain"] ?? "", (bool) $params["secure"], (bool) $params["httponly"] ); } session_destroy(); } public function estConnecte(): bool { return $this->utilisateurCourant() !== null; } public function utilisateurCourant(): ?array { $id = $_SESSION[self::CLE_UTILISATEUR] ?? null; if (!is_string($id) || $id === "") { return null; } $utilisateur = $this->utilisateurService->trouverParId($id); if ($utilisateur === null || !($utilisateur["actif"] ?? false)) { return null; } return $utilisateur; } public function exigerConnexion(): array { $utilisateur = $this->utilisateurCourant(); if ($utilisateur === null) { Flash::definir("warning", "Veuillez vous connecter pour continuer."); Helpers::rediriger("/connexion"); } return $utilisateur; } public function exigerAdmin(): array { $utilisateur = $this->exigerConnexion(); if (($utilisateur["role"] ?? "") !== "admin") { Flash::definir("danger", "Accès réservé aux administrateurs."); Helpers::rediriger("/"); } return $utilisateur; } public function tenterConnexion(string $identifiant, string $motDePasse): bool { $utilisateur = $this->utilisateurService->trouverParIdentifiant($identifiant); if ($utilisateur === null) { return false; } if (!($utilisateur["actif"] ?? false)) { return false; } if (!password_verify($motDePasse, $utilisateur["motDePasseHash"])) { return false; } $this->connecter($utilisateur); return true; } }