2012-08-28 7 views
11

Sto provando a cambiare il backend di sessione di Zend_Auth. Ma non ci riuscirà. Nel mio bootstrap.php;

$oBackend = new Zend_Cache_Backend_Libmemcached(
     array(
      'servers' => $servers, 
      'compression' => false 
    )); 

    // configure caching frontend strategy 
    $oFrontend = new Zend_Cache_Core(
     array(
      'caching' => true, 
      'automatic_serialization' => true 
     )); 

    // build a caching object 
    $cache = Zend_Cache::factory($oFrontend, $oBackend); 

    $saveHandler = new \Application\Auth\Adapter\Memcached(); 
    $saveHandler->setCacher($cache); 

    \Zend_Session::setSaveHandler($saveHandler); 

Stava salvando i valori memcache senza alcun problema. Lo collaudo;

$namespace = new Zend_Session_Namespace(); 
    $namespace->name = "Fatih"; 

In altri controller;

$ns = new Zend_Session_Namespace(); 
    var_dump($ns->name); 

E 'ok, ma non potevo vedere i valori Zend_Auth in memcache .. Ma se io var_dump($_SESSION) riesco a vedere le cose come;

["Zend_Auth"]=> array(1) { ["storage"]=> object(Application_Security_Auth_Storage)#66 (1) { ["_user":protected]=> object(Application_Security_Auth_User)#84 (4) { ["id":protected]=> object(MongoId)#87 (1) { ["$id"]=> string(24) "4fcca6b8c863c79d33000004" } ["username":protected]=> string(5) "admin" ["role":protected]=> string(5) "admin" ["fullname":protected]=> NULL } } } 

Qui è possibile visualizzare il mio metodo di accesso;

public function login($username, $password) 
{ 
    if ($username == "" || $password == "") 
     return false; 

    $adapter = new \Application_Security_Auth_Adapter(); 

    $adapter->setIdentity($username); 
    $adapter->setCredential($password); 

    $auth = \Zend_Auth::getInstance(); 
    $result = $auth->authenticate($adapter); 

    return $result->isValid(); 
} 
+1

Ok Si è scoperto che i nostri server di vernice sono la ragione del problema. Piping semplice per url è stato risolto. –

+1

Non memorizzerei i dati di sessione su memcached, non c'è alcuna garanzia che rimanga lì. –

+1

ok vedo la preoccupazione, cosa useresti per quel tipo di problema? Diciamo che 4 server web devono condividere i dati della sessione. –

risposta

0

Non so se questo sarebbe di alcun aiuto, ma, Zend_Auth crea automaticamente la cosa di archiviazione a cui si può accedere da qualsiasi luogo utilizzando

$session = new Zend_Session_Namespace('Zend_Auth'); 
$session->storage->//here goes your property like user id password etc 

Ora, se si utilizza Zend_Auth userà Zend_Auth_Storage_Session il valore predefinito è "Zend_Auth" come Zend_Session_Namespace. Ora per cambiare lo spazio dei nomi usato modifica il valore predefinito in Zend_Auth_Storage_Session altrimenti fallo tutto manualmente se vuoi mettere in cache queste informazioni o averle memorizzate altrove puoi sempre accedervi e spostarle dove vuoi.

Ora speravo ho aiutato, ma non so anythng di memcache

0

penso che sia più semplice e che tutto si risolverà per voi

Caro Usa utente questa classe per Zend Framework per la sessione.

utilizzare Zend \ Session \ Container;

Quindi eseguire la procedura riportata di seguito per ottenere valori dalle Seesioni.

$user_session = new Container('user_login'); 
    $loginUser = $user_session->login_user['user_type']; 

$ user_session-> login_user in questa variabile devo conservare tutte le serie di informazioni relative all'utente, come tipo di utente, e-mail dell'utente, ID utente ecc ... poi ho questo valori sessione su ogni pagina ...