public function sessionOpen($path = null, $name = null) { if (is_string($this->options['database'])) { $this->options['database'] = sfContext::getInstance()->getDatabaseManager()->getDatabase($this->options['database']); } return parent::sessionOpen($path, $name); }
/** * @see parent::sessionRead */ public function sessionRead($id) { $result = parent::sessionRead($id); $this->setSessionKey($id); // Find session persistent object $session = SessionQuery::create()->filterBySessionKey($id)->findOne(); // Associate an IP address with the session & user if (!is_null($session) && $session instanceof Session) { $context = sfContext::getInstance(); if ($session->getClientIpAddress() == null) { $session->setClientIpAddress($context->getRequest()->getRemoteAddress()); } // Associate User with session $user = $context->getUser(); if ($session->getUserId() == null && !is_null($user) && $user->isAuthenticated()) { $session->setUser($user->getProfile()); } $session->save(); } return $result; }
*/ require_once __DIR__ . '/../../bootstrap/unit.php'; ob_start(); $plan = 14; $t = new lime_test($plan); if (!extension_loaded('SQLite') && !extension_loaded('pdo_SQLite')) { $t->skip('SQLite needed to run these tests', $plan); return; } // initialize the storage $database = new sfPDODatabase(array('dsn' => 'sqlite::memory:')); $connection = $database->getConnection(); $connection->exec('CREATE TABLE session (sess_id, sess_data, sess_time)'); ini_set('session.use_cookies', 0); $session_id = "1"; $storage = new sfPDOSessionStorage(array('db_table' => 'session', 'session_id' => $session_id, 'database' => $database)); $t->ok($storage instanceof sfStorage, 'sfPDOSessionStorage is an instance of sfStorage'); $t->ok($storage instanceof sfDatabaseSessionStorage, 'sfPDOSessionStorage is an instance of sfDatabaseSessionStorage'); // regenerate() $oldSessionData = 'foo:bar'; $storage->sessionWrite($session_id, $oldSessionData); $storage->regenerate(false); $newSessionData = 'foo:bar:baz'; $storage->sessionWrite(session_id(), $newSessionData); $t->isnt(session_id(), $session_id, 'regenerate() regenerated the session with a different session id'); // checking if the old session record still exists $result = $connection->query(sprintf('SELECT sess_id, sess_data FROM session WHERE sess_id = "%s"', $session_id)); $data = $result->fetchAll(); $t->is(count($data), 1, 'regenerate() has kept destroyed old session'); // checking if the new session record has been created $result = $connection->query(sprintf('SELECT sess_id, sess_data FROM session WHERE sess_id = "%s"', session_id()));