* session_set_save_handler(new Memcache(), true);
session_start();
*
* @author Stefan Daurer
* @package Mammut\Session
* @since 1.1.0.0
*/
class MemcacheSession extends \Mammut\StrictObject implements \SessionHandlerInterface {
private $lifetime = 600;
/**
* @var \Memcached
*/
private $pool;
private $fallback = false;
public function __construct($server = 'localhost', $port = 11211) {
$lifetime = ini_get('session.gc_maxlifetime');
if (!empty($lifetime))
$this->lifetime = (int) $lifetime;
if (!class_exists('\\Memcached')) {
$this->fallback = true;
$this->pool = new \Memcache();
}
else
$this->pool = new \Memcached('phpsession');
if (!is_array($server))
$server = array($server);
foreach ($server as $s)
$this->pool->addServer($s, $port);
}
public function open($save_path, $session_name) {
return true;
}
public function read($id) {
return $this->pool->get("sessions/{$id}");
}
public function write($id, $data) {
if ($this->fallback)
return $this->pool->set("sessions/{$id}", $data, 0, $this->lifetime);
else
return $this->pool->set("sessions/{$id}", $data, $this->lifetime);
}
public function destroy($id) {
return $this->pool->delete("sessions/{$id}");
}
public function gc($maxlifetime){
return true;
}
public function close(){
return true;
}
public function __destruct() {
session_write_close();
}
}