|null */ public static function admin(): ?array { self::start(); $adminId = (int) ($_SESSION[self::SESSION_ADMIN_ID] ?? 0); if ($adminId <= 0) { return null; } $admin = (new AdminRepository())->findActiveById($adminId); if ($admin === null) { unset($_SESSION[self::SESSION_ADMIN_ID]); } return $admin; } public static function attempt(string $email, string $password): bool { self::start(); $repository = new AdminRepository(); $admin = $repository->findActiveByEmail($email); if ($admin === null || !password_verify($password, (string) $admin['password_hash'])) { return false; } session_regenerate_id(true); $_SESSION[self::SESSION_ADMIN_ID] = (int) $admin['id']; $repository->touchLastLogin((int) $admin['id']); return true; } public static function logout(): void { self::start(); $_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(); } }