如何用couchbase存储session
有两种常见方式:
1.采用memcache模式连接couchbase 只需两句修改:
ini_set('session.save_handler', 'memcache'); ini_set('session.save_path', 'tcp://couchbase_host:9999');
注意里面的9999是couchbase 里面创建的bucket的对外memcache端口,这种访问方式运行以memcache兼容的模式访问couchbase。
2.采用couchbase扩展添加一个sessionhandler如下:
/**** * php storage session with couchbase * by fushanlang@gmail.com */ /*** * SessionHandlerInterface is a internal interface only for PHP_VERSION>=5.4.0 * so if interface_exists() false we need to define by yourself. */ if (!interface_exists('SessionHandlerInterface')) { interface SessionHandlerInterface { public function close(); public function destroy($session_id); public function gc($maxlifetime); public function open($save_path, $session_id); public function read($session_id); public function write($session_id, $session_data); } } /** * A reference implementation of a custom Couchbase session handler. */ class CouchbaseSessionHandler implements SessionHandlerInterface { /** * Holds the Couchbase connection. */ protected $_connection = null; /** * The Couchbase host and port. */ protected $_host = null; /** * The Couchbase bucket name. */ protected $_bucket = null; /** * The prefix to be used in Couchbase keynames. */ protected $_keyPrefix = 'session:'; /** * Define a expiration time of 10 minutes. */ protected $_expire = 600; /** * Set the default configuration params on init. */ public function __construct($host = '127.0.0.1:8091', $bucket = 'default') { $this->_host = $host; $this->_bucket = $bucket; } /** * Open the connection to Couchbase (called by PHP on `session_start()`) */ public function open($savePath, $sessionName) { $this->_connection = new Couchbase($this->_host, '', '', $this->_bucket); return $this->_connection ? true : false; } /** * Close the connection. Called by PHP when the script ends. */ public function close() { unset($this->_connection); return true; } /** * Read data from the session. */ public function read($sessionId) { $key = $this->_keyPrefix . $sessionId; $result = $this->_connection->get($key); return $result ? : null; } /** * Write data to the session. */ public function write($sessionId, $sessionData) { $key = $this->_keyPrefix . $sessionId; if (empty($sessionData)) { return false; } $result = $this->_connection->set($key, $sessionData, $this->_expire); return $result ? true : false; } /** * Delete data from the session. */ public function destroy($sessionId) { $key = $this->_keyPrefix . $sessionId; $result = $this->_connection->delete($key); return $result ? true : false; } /** * Run the garbage collection. */ public function gc($maxLifetime) { return true; } } //usage example define('COUCHBASE_HOST_PORT','xxxxx:8091'); define('COUCHBASE_BUCKET','session'); if(class_exists('Couchbase')&&defined('COUCHBASE_HOST_PORT')&&defined('COUCHBASE_BUCKET')){ $handler = new CouchbaseSessionHandler(COUCHBASE_HOST_PORT,COUCHBASE_BUCKET); if(version_compare(PHP_VERSION,'5.4.0')>=0){ session_set_save_handler($handler,true); }else{ session_set_save_handler( array($handler, 'open'), array($handler, 'close'), array($handler, 'read'), array($handler, 'write'), array($handler, 'destroy'), array($handler, 'gc')); } } session_start();
最新评论