* (c) 2004-2006 Sean Kerr.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* sfSessionStorage allows you to store persistent symfony data in the user session.
*
* Optional parameters:
*
* # auto_start - [Yes] - Should session_start() automatically be called?
* # session_name - [symfony] - The name of the session.
*
* @package symfony
* @subpackage storage
* @author Fabien Potencier
* @author Sean Kerr
* @version SVN: $Id: sfSessionStorage.class.php 3329 2007-01-23 08:29:34Z fabien $
*/
class sfSessionStorage extends sfStorage
{
/**
* Initializes this Storage instance.
*
* @param sfContext A sfContext instance
* @param array An associative array of initialization parameters
*
* @return boolean true, if initialization completes successfully, otherwise false
*
* @throws sfInitializationException If an error occurs while initializing this Storage
*/
public function initialize($context, $parameters = null)
{
// initialize parent
parent::initialize($context, $parameters);
// set session name
$sessionName = $this->getParameterHolder()->get('session_name', 'symfony');
session_name($sessionName);
$use_cookies = (boolean) ini_get('session.use_cookies');
if (!$use_cookies)
{
$sessionId = $context->getRequest()->getParameter($sessionName, '');
if ($sessionId != '')
{
session_id($sessionId);
}
}
$cookieDefaults = session_get_cookie_params();
$lifetime = $this->getParameter('session_cookie_lifetime', $cookieDefaults['lifetime']);
$path = $this->getParameter('session_cookie_path', $cookieDefaults['path']);
$domain = $this->getParameter('session_cookie_domain', $cookieDefaults['domain']);
$secure = $this->getParameter('session_cookie_secure', $cookieDefaults['secure']);
$httpOnly = $this->getParameter('session_cookie_httponly', isset($cookieDefaults['httponly']) ? $cookieDefaults['httponly'] : false);
if (version_compare(phpversion(), '5.2', '>='))
{
session_set_cookie_params($lifetime, $path, $domain, $secure, $httpOnly);
}
else
{
session_set_cookie_params($lifetime, $path, $domain, $secure);
}
if ($this->getParameter('auto_start', true))
{
// start our session
session_start();
}
}
/**
* Reads data from this storage.
*
* The preferred format for a key is directory style so naming conflicts can be avoided.
*
* @param string A unique key identifying your data
*
* @return mixed Data associated with the key
*/
public function & read($key)
{
$retval = null;
if (isset($_SESSION[$key]))
{
$retval =& $_SESSION[$key];
}
return $retval;
}
/**
* Removes data from this storage.
*
* The preferred format for a key is directory style so naming conflicts can be avoided.
*
* @param string A unique key identifying your data
*
* @return mixed Data associated with the key
*/
public function & remove($key)
{
$retval = null;
if (isset($_SESSION[$key]))
{
$retval =& $_SESSION[$key];
unset($_SESSION[$key]);
}
return $retval;
}
/**
* Writes data to this storage.
*
* The preferred format for a key is directory style so naming conflicts can be avoided.
*
* @param string A unique key identifying your data
* @param mixed Data associated with your key
*
*/
public function write($key, &$data)
{
$_SESSION[$key] =& $data;
}
/**
* Executes the shutdown procedure.
*
*/
public function shutdown()
{
// don't need a shutdown procedure because read/write do it in real-time
}
}