2010-10-15 30 views
7

J'utilise Zend_Auth pour un de mes projets, mais jusqu'à présent, je n'ai pas compris comment définir la durée de vie de la session, ou comment l'étendre (disons qu'elle doit durer 5 minutes et doit remettre à ce que lorsque l'utilisateur effectue une action), voici mon code d'initialisation:définir et étendre la durée de vie de session en utilisant Zend_Auth

 $authAdapter = new Zend_Auth_Adapter_DbTable($this->_model->pdo); 
     $authAdapter->setTableName('normal_folks') 
      ->setIdentityColumn('username') 
      ->setCredentialColumn('password'); 

     $post = $this->_request->getPost(); 

     $authAdapter->setIdentity($post['username']) 
      ->setCredential($post['password']); 
     $auth = Zend_Auth::getInstance(); 
     $result = $auth->authenticate($authAdapter); 

     if($result->isValid()) 
     { 
      $userInfo = $authAdapter->getResultRowObject(null, 'password'); 
      $authStorage = $auth->getStorage(); 
      $authStorage->write($userInfo); 

      if(strlen($post['refferer']) > 1){ 
       header("Location: ".$post['refferer']); 
      }elseif(strlen($this->_request->getParam('ref_action')) > 1){ 
       Zend_Controller_Action::_forward($this->_request->getParam('ref_action'),"admin",null,null); 
      }else{ 
       Zend_Controller_Action::_forward("index","admin",null,null); 
      } 
     } 

Ant ce que je vérifie si l'utilisateur est connecté:

   if(Zend_Auth::getInstance()->hasIdentity()){ 
        echo "Woho!"; 
       }else{ 
        die("invalid-identity"); 
       } 

Son probablement juste devant de moi mais je ne peux pas le comprendre, aider? S'il vous plaît? Jolie s'il-vous-plaît? : D

Répondre

13

L'état d'authentification est stocké dans le stockage d'authentification enregistré. Par défaut, il s'agit de Zend_Session. Vous pouvez set an expiration time to the Zend_Auth namespace, par ex.

$namespace = new Zend_Session_Namespace('Zend_Auth'); 
$namespace->setExpirationSeconds(300); 

Vous pouvez également globally configure Zend_Session via

Zend_Session::setOptions(array(
    'cookie_lifetime' => 300, 
    'gc_maxlifetime' => 300)); 
+0

également tout comment je peux "rafraîchir" que vie dans le cas d'une action? – Hannes

+0

@Hannes Je pense que l'heure d'expiration se rafraîchira automatiquement à chaque requête, donc la simple mise à jour de la page vous donnera 300 secondes de plus. – Gordon

+0

btw. petite typo là;) '$ namespace = nouveau Zend_Session_Namespace ('Zend_Auth');' Et oui vous avez raison, il se réinitialise à chaque appel, pour une raison quelconque votre seconde solution ne fonctionne pas (mettez-la dans le init()) - mais le premier fonctionne juste dandy: D Merci beaucoup! – Hannes

1

Si vous utilisez différents espaces de noms pour la session Zend_Auth vous pouvez le faire comme ceci:

$auth = Zend_Auth::getInstance(); 
$auth->setStorage (new Zend_Auth_Storage_Session ('user')); 

$namespace = new Zend_Session_Namespace('user'); 
$namespace->setExpirationSeconds(7200); // 2 hours 
+0

merci pour votre réponse, bien que je ne suis pas en mesure de le vérifier puisque l'application en question n'est plus maintenue – Hannes