* @author Torsten Roehr * @copyright 1997-2007 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 * @version CVS: $Id: Memcache.php,v 1.3 2007/07/14 12:11:55 troehr Exp $ * @link http://pear.php.net/package/HTTP_Session * @since File available since Release 0.5.6 */ require_once 'HTTP/Session/Container.php'; /** * Database container for session data * * @category HTTP * @package HTTP_Session * @author Chad Wagner * @author Torsten Roehr * @copyright 1997-2007 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 * @version Release: @package_version@ * @link http://pear.php.net/package/HTTP_Session * @since Class available since Release 0.5.6 */ class HTTP_Session_Container_Memcache extends HTTP_Session_Container { /** * Memcache connection object * * @var object Memcache * @access private */ var $mc; /** * Constructor method * * $options is an array with the options.
* The options are: *
    *
  • 'memcache' - Memcache object *
  • 'prefix' - Key prefix, default is 'sessiondata:'
  • *
* * @param array $options Options * * @access public * @return object */ function HTTP_Session_Container_Memcache($options) { $this->_setDefaults(); if (is_array($options)) { $this->_parseOptions($options); } } /** * Connect to database by using the given DSN string * * @param string $mc Memcache object * * @access private * @return mixed Object on error, otherwise bool */ function _connect($mc) { if (is_object($mc) && is_a($mc, 'Memcache')) { $this->mc = $mc; } else { return new PEAR_Error('The given memcache object was not valid in file ' . __FILE__ . ' at line ' . __LINE__, 41, PEAR_ERROR_RETURN, null, null ); } return true; } /** * Set some default options * * @access private * @return void */ function _setDefaults() { $this->options['prefix'] = 'sessiondata:'; $this->options['memcache'] = null; } /** * Establish connection to a database * * @param string $save_path Save path * @param string $session_name Session name * * @access public * @return mixed Object on error, otherwise bool */ function open($save_path, $session_name) { return $this->_connect($this->options['memcache']); } /** * Free resources * * @access public * @return bool */ function close() { return true; } /** * Read session data * * @param string $id Session id * * @access public * @return mixed */ function read($id) { $result = $this->mc->get($this->options['prefix'] . $id); return $result; } /** * Write session data * * @param string $id Session id * @param mixed $data Session data * * @access public * @return bool */ function write($id, $data) { $this->mc->set($this->options['prefix'] . $id, $data, MEMCACHE_COMPRESSED, time() + ini_get('session.gc_maxlifetime')); return true; } /** * Destroy session data * * @param string $id Session id * * @access public * @return bool */ function destroy($id) { $this->mc->delete($this->options['prefix'] . $id); return true; } /** * Garbage collection * * @param int $maxlifetime Maximum lifetime * * @access public * @return bool */ function gc($maxlifetime) { return true; } } ?>