startRecording('session'); $session_handler = $config->get('system', 'session_handler', self::HANDLER_DEFAULT); if ($mode->isInstall() || $mode->isBackend()) { $session = new Memory(); $profiler->stopRecording(); return $session; } try { switch ($session_handler) { case self::HANDLER_DATABASE: $handler = new DatabaseHandler($dba, $logger, $server); break; case self::HANDLER_CACHE: $cache = $cacheFactory->createDistributed(); // In case we're using the db as cache driver, use the native db session, not the cache if ($config->get('system', 'cache_driver') === DatabaseCache::NAME) { $handler = new DatabaseHandler($dba, $logger, $server); } else { $handler = new CacheHandler($cache, $logger); } break; default: $handler = null; } } catch (Throwable $e) { $logger->notice('Unable to create session', ['mode' => $mode, 'session_handler' => $session_handler, 'exception' => $e]); $session = new Memory(); $profiler->stopRecording(); return $session; } try { $session = new Native($baseURL, $handler); } catch (Throwable $e) { $logger->notice('Unable to create session', ['mode' => $mode, 'session_handler' => $session_handler, 'exception' => $e]); $session = new Memory(); } $profiler->stopRecording(); return $session; } }