2012-08-28 8 views
11

Estoy intentando cambiar el back-end de sesión de Zend_Auth. Pero no podría tener éxito. En mi 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); 

Estaba guardando los valores de Memcache con éxito sin ningún problema. Lo pruebo;

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

En otro controlador;

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

Está bien, pero no pude ver los valores Zend_Auth en Memcache .. Pero si var_dump($_SESSION) lo puedo ver como;

["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 } } } 

Aquí puede ver mi método de inicio de sesión;

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 Resultó que nuestros servidores de barniz son la causa del problema. Se arregla la tubería simple a url. –

+1

No almacenaría datos de sesión en memcached, no hay garantía de que permanezcan allí. –

+1

bien, veo la preocupación, ¿qué usarías para ese tipo de problema? Supongamos que 4 servidores web necesitan compartir datos de sesión .. –

Respuesta

0

No sé si esto sería de alguna ayuda, pero, Zend_Auth crea automáticamente la cosa de almacenamiento al que se puede acceder desde cualquier lugar utilizando

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

Ahora bien, si se utiliza Zend_Auth que utilizará Zend_Auth_Storage_Session el valor predeterminado es "Zend_Auth" como Zend_Session_Namespace. Ahora, para cambiar el espacio de nombre utilizado, modifique el valor predeterminado en Zend_Auth_Storage_Session, o bien, hágalo todo manualmente. Si desea almacenar en caché esta información o tenerla almacenada en otro lugar, siempre puede acceder a ella y moverla a donde desee.

Ahora yo esperaba ayudé, pero no sé anythng de Memcache

0

Creo que es más simple y que funcionará para usted

Estimado usuario usa esta clase para Zend Framework para la sesión.

uso Zend \ Session \ Container;

A continuación, realice el procedimiento siguiente para Obtener valores de las versiones.

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

$ user_session-> login_user en esta variable i almacenar toda la gama de información relacionada con el usuario como el tipo de usuario, correo electrónico del usuario, ID de usuario, etc ... entonces me sale esto valores de sesión en cada página ...

Cuestiones relacionadas