/**
  * Saves the passed session to the persistence layer.
  *
  * @param \AppserverIo\Psr\Servlet\ServletSessionInterface $session The session to save
  *
  * @return void
  * @throws AppserverIo\Appserver\ServletEngine\SessionCanNotBeSavedException Is thrown if the session can't be saved
  */
 public function save(ServletSessionInterface $session)
 {
     // don't save the session if it has been destroyed
     if ($session->getId() == null) {
         return;
     }
     // update the checksum and the file that stores the session data
     if (apc_store($session->getId(), $this->marshall($session)) === false) {
         throw new SessionCanNotBeSavedException(sprintf('Session with ID %s can\'t be saved'));
     }
 }
 /**
  * Initializes the session instance from the passed JSON string. If the encoded
  * data contains objects, they will be un-serialized before reattached to the
  * session instance.
  *
  * @param \AppserverIo\Psr\Servlet\ServletSessionInterface $servletSession The empty session instance we want the un-marshaled data be added to
  * @param string                                           $marshalled     The marshaled session representation
  *
  * @return \AppserverIo\Psr\Servlet\ServletSessionInterface The decoded session instance
  * @see \AppserverIo\Appserver\ServletEngine\SessionMarshaller::unmarshall()
  */
 public function unmarshall(ServletSessionInterface $servletSession, $marshalled)
 {
     // decode the string
     $decodedSession = json_decode($marshalled);
     // extract the values
     $id = $decodedSession->id;
     $name = $decodedSession->name;
     $lifetime = $decodedSession->lifetime;
     $maximumAge = $decodedSession->maximumAge;
     $domain = $decodedSession->domain;
     $path = $decodedSession->path;
     $secure = $decodedSession->secure;
     $httpOnly = $decodedSession->httpOnly;
     $data = $decodedSession->data;
     // initialize the instance
     $servletSession->init($id, $name, $lifetime, $maximumAge, $domain, $path, $secure, $httpOnly);
     // append the session data
     foreach ($data as $key => $value) {
         $servletSession->putData($key, unserialize($value));
     }
 }
 /**
  * Attaches the passed session to the manager and returns the instance.
  * If a session
  * with the session identifier already exists, it will be overwritten.
  *
  * @param \AppserverIo\Psr\Servlet\ServletSessionInterface $session The session to attach
  *
  * @return void
  */
 public function attach(ServletSessionInterface $session)
 {
     // load session ID
     $id = $session->getId();
     // register checksum + session
     $this->getSessions()->set($id, $session);
 }
 /**
  * Saves the passed session to the persistence layer.
  *
  * @param \AppserverIo\Psr\Servlet\ServletSessionInterface $session The session to save
  *
  * @return void
  * @throws AppserverIo\Appserver\ServletEngine\SessionCanNotBeSavedException Is thrown if the session can't be saved
  */
 public function save(ServletSessionInterface $session)
 {
     // don't save the session if it has been destroyed
     if ($session->getId() == null) {
         return;
     }
     // prepare the session filename
     $sessionFilename = $this->getSessionSavePath($this->getSessionSettings()->getSessionFilePrefix() . $session->getId());
     // update the checksum and the file that stores the session data
     if (file_put_contents($sessionFilename, $this->marshall($session)) === false) {
         throw new SessionCanNotBeSavedException(sprintf('Session with ID %s can\'t be saved'));
     }
 }