首页 > memcache用数据库,或者memcache,redis代替文件session的做法

主要函数是@session_set_save_handler(
array($this->memcache_session, ‘open’),
array($this->memcache_session, ‘close’),
array($this->memcache_session, ‘read’),
array($this->memcache_session, ‘write’),
array($this->memcache_session, ‘destroy’),
array($this->memcache_session, ‘gc’)
);

 

$this->memcache_session是memcache_session类,里面有open==相关方法

class Memcache_session{
private $ci;
private static $lifetime = 0;
private $memcache;
private $prefix = ‘sess_’;

function __construct(){
$this->ci =& get_instance();
$this->prefix = $this->ci->config->config[‘site’] . ‘_sess_’;
}

function open(){
$this->lifetime = ini_get(‘session.gc_maxlifetime’);
$this->memcache = new Memcache();
foreach($this->ci->config->config[‘memcache’] as $value){
$this->memcache->addServer($value[‘host’], $value[‘port’], true, $value[‘weight’]);
}
return true;
}

function read($id){
return $this->memcache->get($this->prefix . $id);
}

function close(){
return true;
}

function write($id, $data){
return $this->memcache->set($this->prefix . $id, $data, $this->lifetime);
}

function destroy($id){
//这个destroy并不能删除所有session
return $this->memcache->delete($this->prefix . $id);
}

function gc(){
return true;
}

function __destruct(){
//20150325这里释放掉连接,看上去11211 netstat连接挺多的..
//$this->memcache->close();
session_write_close();
}

}

 

同样的,redis,数据库方面的都是类似