/** * Returns the session for this request. * * @param boolean $create TRUE to create a new session, else FALSE * * @return null|\AppserverIo\Psr\Servlet\Http\HttpSessionInterface The session instance * * @throws \Exception */ public function getSession($create = false) { // load the proposed session-ID and name $id = $this->getProposedSessionId(); $sessionName = $this->getRequestedSessionName(); // if no session has already been load, initialize the session manager /** @var \AppserverIo\Appserver\ServletEngine\SessionManagerInterface $manager */ $manager = $this->getSessionManager(); // if no session manager was found, we don't support sessions if ($manager == null) { return; } // find or create a new session (if flag has been set) $session = $manager->find($id); // if we can't find a session or session has been expired and we want to create a new one if ($session == null && $create === true) { // check if a session ID has been specified if ($id == null) { // if not, generate a unique one $id = SessionUtils::generateRandomString(); } // create a new session and register ID in request $session = $manager->create($id, $sessionName); } // if we can't find a session and we should NOT create one, return nothing if ($create === false && $session == null) { return; } // if we can't find a session although we SHOULD create one, we throw an exception if ($create === true && $session == null) { throw new \Exception('Can\'t create a new session!'); } // initialize the session wrapper $wrapper = new SessionWrapper(); $wrapper->injectSession($session); $wrapper->injectRequest($this); // return the found session return $wrapper; }