getMessage()); } } /** * Check if database sessions are available * * @return bool True if sessions table exists and database is accessible */ private static function isDatabaseSessionsAvailable(): bool { try { // Check if database credentials are configured if (empty($_ENV['DB_HOST']) || empty($_ENV['DB_DATABASE'])) { return false; } // Create PDO connection $pdo = new \PDO( "mysql:host={$_ENV['DB_HOST']};dbname={$_ENV['DB_DATABASE']}", $_ENV['DB_USERNAME'], $_ENV['DB_PASSWORD'], [ \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION, \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC ] ); // Check if sessions table exists $stmt = $pdo->query("SHOW TABLES LIKE 'sessions'"); return $stmt->rowCount() > 0; } catch (\Exception $e) { // Database not available or sessions table doesn't exist return false; } } /** * Start session with validation */ public static function start(): void { session_start(); // Validate session exists in database (for database-backed sessions) // This ensures deleted sessions are immediately invalidated SessionValidator::validate(); } }