X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FFactory%2FSessionFactory.php;h=491573033bd4b22994ddda1ce06381d47be5f199;hb=3e6fea30f2f3bc2352b6e16e1d48e204cde3696b;hp=ed2f787b4273aafc79f0db0ee2d2315b5998bc8e;hpb=555513e4b48e948bdfd64bba833e0ccf222c0b2b;p=friendica.git diff --git a/src/Factory/SessionFactory.php b/src/Factory/SessionFactory.php index ed2f787b42..491573033b 100644 --- a/src/Factory/SessionFactory.php +++ b/src/Factory/SessionFactory.php @@ -1,78 +1,91 @@ . + * + */ namespace Friendica\Factory; use Friendica\App; -use Friendica\Core\Cache\Cache; use Friendica\Core\Cache\ICache; -use Friendica\Core\Config\Configuration; -use Friendica\Core\Session\CacheSession; -use Friendica\Core\Session\DatabaseSession; -use Friendica\Core\Session\ISession; -use Friendica\Core\Session\Memory; -use Friendica\Core\Session\MemorySession; -use Friendica\Core\Session\NativeSession; +use Friendica\Core\Cache\Type; +use Friendica\Core\Config\IConfig; +use Friendica\Core\Session; use Friendica\Core\System; use Friendica\Database\Database; -use Friendica\Model\User\Cookie; use Friendica\Util\Profiler; use Psr\Log\LoggerInterface; +/** + * Factory for creating a valid Session for this run + */ class SessionFactory { /** @var string The plain, PHP internal session management */ - const INTERNAL = 'native'; + const HANDLER_NATIVE = 'native'; /** @var string Using the database for session management */ - const DATABASE = 'database'; + const HANDLER_DATABASE = 'database'; /** @var string Using the cache for session management */ - const CACHE = 'cache'; - /** @var string A temporary cached session */ - const MEMORY = 'memory'; - /** @var string The default type for Session management in case of no config */ - const DEFAULT = self::DATABASE; + const HANDLER_CACHE = 'cache'; + + const HANDLER_DEFAULT = self::HANDLER_DATABASE; /** * @param App\Mode $mode - * @param Configuration $config - * @param Cookie $cookie + * @param App\BaseURL $baseURL + * @param IConfig $config * @param Database $dba * @param ICache $cache * @param LoggerInterface $logger * @param array $server * - * @return ISession + * @return Session\ISession */ - public function createSession(App\Mode $mode, Configuration $config, Cookie $cookie, Database $dba, ICache $cache, LoggerInterface $logger, Profiler $profiler, array $server = []) + public function createSession(App\Mode $mode, App\BaseURL $baseURL, IConfig $config, Database $dba, ICache $cache, LoggerInterface $logger, Profiler $profiler, array $server = []) { - $stamp1 = microtime(true); + $profiler->startRecording('session'); $session = null; try { if ($mode->isInstall() || $mode->isBackend()) { - $session = new MemorySession(); + $session = new Session\Memory(); } else { - $session_handler = $config->get('system', 'session_handler', self::DEFAULT); + $session_handler = $config->get('system', 'session_handler', self::HANDLER_DEFAULT); + $handler = null; switch ($session_handler) { - case self::INTERNAL: - $session = new NativeSession($config, $cookie); - break; - case self::DATABASE: - default: - $session = new DatabaseSession($config, $cookie, $dba, $logger, $server); + case self::HANDLER_DATABASE: + $handler = new Session\Handler\Database($dba, $logger, $server); break; - case self::CACHE: + case self::HANDLER_CACHE: // In case we're using the db as cache driver, use the native db session, not the cache - if ($config->get('system', 'cache_driver') === Cache::TYPE_DATABASE) { - $session = new DatabaseSession($config, $cookie, $dba, $logger, $server); + if ($config->get('system', 'cache_driver') === Type::DATABASE) { + $handler = new Session\Handler\Database($dba, $logger, $server); } else { - $session = new CacheSession($config, $cookie, $cache, $logger, $server); + $handler = new Session\Handler\Cache($cache); } break; } + + $session = new Session\Native($baseURL, $handler); } } finally { - $profiler->saveTimestamp($stamp1, 'parser', System::callstack()); + $profiler->stopRecording(); return $session; } }