/** * Create a session corresponding to the passed SessionInfo * @private For use by a SessionProvider that needs to specially create its * own session. * @param SessionInfo $info * @param WebRequest $request * @return Session */ public function getSessionFromInfo(SessionInfo $info, WebRequest $request) { $id = $info->getId(); if (!isset($this->allSessionBackends[$id])) { if (!isset($this->allSessionIds[$id])) { $this->allSessionIds[$id] = new SessionId($id); } $backend = new SessionBackend($this->allSessionIds[$id], $info, $this->store, $this->logger, $this->config->get('ObjectCacheSessionExpiry')); $this->allSessionBackends[$id] = $backend; $delay = $backend->delaySave(); } else { $backend = $this->allSessionBackends[$id]; $delay = $backend->delaySave(); if ($info->wasPersisted()) { $backend->persist(); } if ($info->wasRemembered()) { $backend->setRememberUser(true); } } $request->setSessionId($backend->getSessionId()); $session = $backend->getSession($request); if (!$info->isIdSafe()) { $session->resetId(); } \ScopedCallback::consume($delay); return $session; }
/** * Create a Session corresponding to the passed SessionInfo * @private For use by a SessionProvider that needs to specially create its * own Session. Most session providers won't need this. * @param SessionInfo $info * @param WebRequest $request * @return Session */ public function getSessionFromInfo(SessionInfo $info, WebRequest $request) { // @codeCoverageIgnoreStart if (defined('MW_NO_SESSION')) { if (MW_NO_SESSION === 'warn') { // Undocumented safety case for converting existing entry points $this->logger->error('Sessions are supposed to be disabled for this entry point', ['exception' => new \BadMethodCallException('Sessions are disabled for this entry point')]); } else { throw new \BadMethodCallException('Sessions are disabled for this entry point'); } } // @codeCoverageIgnoreEnd $id = $info->getId(); if (!isset($this->allSessionBackends[$id])) { if (!isset($this->allSessionIds[$id])) { $this->allSessionIds[$id] = new SessionId($id); } $backend = new SessionBackend($this->allSessionIds[$id], $info, $this->store, $this->logger, $this->config->get('ObjectCacheSessionExpiry')); $this->allSessionBackends[$id] = $backend; $delay = $backend->delaySave(); } else { $backend = $this->allSessionBackends[$id]; $delay = $backend->delaySave(); if ($info->wasPersisted()) { $backend->persist(); } if ($info->wasRemembered()) { $backend->setRememberUser(true); } } $request->setSessionId($backend->getSessionId()); $session = $backend->getSession($request); if (!$info->isIdSafe()) { $session->resetId(); } \Wikimedia\ScopedCallback::consume($delay); return $session; }