get(self::KEY); if (is_string($existing) && $existing !== '') { return $existing; } return self::rotate($session); } /** * Vrai uniquement si un jeton existe en session et egale (temps constant) le * jeton soumis. Toute absence (pas de jeton, soumission vide) renvoie false. */ public static function validate(SessionManager $session, ?string $submitted): bool { $stored = $session->get(self::KEY); if (!is_string($stored) || $stored === '' || $submitted === null || $submitted === '') { return false; } return hash_equals($stored, $submitted); } /** * Re-genere le jeton (apres regeneration d'ID de session sur login reussi) : * invalide tout jeton anterieur a l'authentification. */ public static function rotate(SessionManager $session): string { $token = bin2hex(random_bytes(32)); $session->set(self::KEY, $token); return $token; } }