I don't know why you usse this class to save session handler... but if you
use php with apache you can configure in php.ini session.save_handler to web
server save in memcached the sessionid.

regards.

2008/2/29, Mickael Gentil <[EMAIL PROTECTED]>:
>
> Hi all,
>
> In first, I'm not familiar with the memcache object.
>
> I had to develop a memcache object wich must work with our actual sessions
> files (and not database session).
>
> I used the init handler session and his callback functions.
>
> But in the architecture of the web site in our production environment, we
> have 2 web server with memcache installed (on both) behind a load balancer.
> And the cached session must be accessible on both of them.
>
> This is my class :
>
> class MemcacheSession {
>
>   /********************************************
>   * CONSTANTS                                  *
>   * ******************************************/
>
>   const DEFAULT_HOST        = "127.0.0.1";
>   const DEFAULT_PORT        = 11211;
>   const DEFAULT_COMPRESSION = MEMCACHE_COMPRESSED;
>
>   /*******************************************
>   * PRIVATE VARS                              *
>   * ******************************************/
>
>   private $servers;
>   private $memcache;
>
>   /*******************************************
>   * PUBLIC VARS                              *
>   * ******************************************/
>
>   public $lifeTime;
>
>   /*******************************************
>   * SINGLETON                                *
>   * ******************************************/
>
>   private static $instance = null;
>
>   public static function getInstance() {
>     if (empty(self::$instance)) {
>       self::$instance = new MemcacheSession();
>     }
>     return self::$instance;
>   }
>
>   /*******************************************
>   * CONSTRUCTOR                              *
>   * ******************************************/
>
>   private function __construct() {
>       $this->memcache = new Memcache;
>       $this->servers    = array();
>   }
>
>   /*******************************************
>   * PUBLIC METHODS                           *
>   * ******************************************/
>
>   public function start() {
>
>       $this->initSaveHandler();
>
>     if(empty($this->servers)){
>       $this->servers[] = array(self::DEFAULT_HOST=>self::DEFAULT_PORT);
>     }
>     for ($i = 0, $n = count($this->servers); $i < $n; ++$i){
>       $this->memcache->addServer(key($this->servers[$i]),
> current($this->servers[$i]));
>     }
>   }
>
>   public function addServer(array $server){
>     $this->servers[] = array($server[0]=>$server[1]);
>   }
>
>   public function addMultipleServer(array $server){
>     for ($i = 0, $n = count($server); $i < $n; ++$i){
>       $this->servers[] = $server[$i];
>     }
>   }
>
>   /*******************************************
>   * PRIVATE METHODS                          *
>   * ******************************************/
>
>   private function initSaveHandler(){
>      session_set_save_handler(array(&$this,"sessionOpenCb"),
>                        array(&$this,"sessionCloseCb"),
>                        array(&$this,"sessionReadCb"),
>                        array(&$this,"sessionWriteCb"),
>                        array(&$this,"sessionDestroyCb"),
>                        array(&$this,"sessionGcCb"));
>   }
>
>   /*******************************************
>   * CALLBACK METHODS                         *
>   * ******************************************/
>
>   public function sessionOpenCb($savePath, $sessName) {
>     return $this->lifeTime = get_cfg_var("session.gc_maxlifetime");
>   }
>
>   public function sessionCloseCb() {
>     return $this->sessionGcCb(ini_get('session.gc_maxlifetime'));
>   }
>
>   public function sessionReadCb($sessID) {
>       return $this->memcache->get($sessID);
>   }
>
>   public function sessionWriteCb($sessID,$sessData) {
>       return $this->memcache->set($sessID, $sessData,
> self::DEFAULT_COMPRESSION, $this->lifeTime) or false;
>   }
>
>   public function sessionDestroyCb($sessID) {
>       return $this->memcache->delete($sessID);
>   }
>
>   public function sessionGcCb($sessMaxLifeTime) {}
>
> }
>
> And his implementation :
>
> $memcacheSess = MemcacheSession::getInstance();
> $memcacheSess->addServer(array('192.168.0.1','11211'));
> $memcacheSess->addServer(array('192.168.0.2','11211'));
> $memcacheSess->start();
>
> session_start();
>
> And after we use the standard procedure of $_SESSION object.
>
> In the memcache log (on both servers) i can see some
> get/set/stored/deleted events.
>
> But the session is not accessible on the both server and i can't access to
> my information where the session is not write by the $_SESSION object.
>
> Someone can help me on this particular problem ?
>
> Thanks a lot.
>
> Mickaƫl.
>
>

Reply via email to