O post de hoje se dedica a aumentar a performance no armazenamento e recuperação de sessões, mais um dos estudos realizados pela nossa equipe e que foi implantado no nosso projeto. Ele consiste em pega a sessão do usuário e armazenar em um servidor de cache, no nosso caso o memcached.
A implementação é muito simples, você terá apenas que criar uma classe e mudar o modo que cria sua sessão, o resto permanece igual, pois é Zend_Session se encarrega de achar a sessão dentro do cache. Abaixo vai o código da nova classe que deve implementar a interface Zend_Session_SaveHandler_Interface.
class Xorna_SessionHandler implements Zend_Session_SaveHandler_Interface{
private $maxlifetime = 3600;
public $cache = ''; public function __construct($cacheHandler) {
$this->cache = $cacheHandler;
}
public function open($save_path, $name) {
return true;
}
public function close() {
return true;
}
public function read($id) {
if(!($data = $this->cache->load($id))) {
return '';
}
else {
return $data;
}
}
public function write($id, $sessionData) {
$this->cache->save($sessionData, $id, array(), $this->maxlifetime);
return true;
}
public function destroy($id) {
$this->cache->remove($id);
return true;
}
public function gc($notusedformemcache) {
return true;
}
}
?>
Bom, feito isso agora só precisamos instanciar isso, e criar a sessão:
Zend_Loader::loadClass('Xorna_SessionHandler');
$cache = Zend_Cache::factory('Core', 'Memcached', $frontendOptions, $backendOptions);
Zend_Session::setSaveHandler(new Xorna_SessionHandler($_cache));
Zend_Session::start();
Daqui em diante nada muda.
















Caro,
Estou trabalhando com a integração entre dois servidores, vi que com o Memcached pode ser uma solução.
Você escreveu alguns artigos sobre a memcache, como faço para passar uma ou algumas variáveis de forma segura para outro servidor?
Eu consigo acessar a memcached por outro servidor? posso criar uma memcached para administrar minhas sessions de vários servidores?
aguardo resposta, desde já agradeço.
Roberto