2010-10-15 17 views
7

Używam Zend_Auth dla jednego z moich projektów, ale jak dotąd nie wiem, jak ustawić czas życia sesji, lub jak go rozszerzyć (powiedzmy, że powinien potrwać 5 minut i należy przywrócić że gdy użytkownik dokonuje czynności), tutaj jest mój kod inicjalizacji:Ustawianie i przedłużanie czasu trwania sesji przy użyciu 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 to w jaki sposób mogę sprawdzić, czy użytkownik jest zalogowany:

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

Jego prawdopodobnie tuż przed mnie, ale po prostu nie mogę tego rozgryźć, pomóc? Proszę? Pięknie proszę? : D

Odpowiedz

13

Stan uwierzytelnienia jest przechowywany w zarejestrowanej pamięci Auth. Domyślnie jest to Zend_Session. Możesz set an expiration time to the Zend_Auth namespace, np.

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

Można również globally configure Zend_Session poprzez

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

Także wszelkie jaki sposób można „odświeżyć”, który czas życia w przypadku działania? – Hannes

+0

@Hannes Myślę, że czas wygaśnięcia odświeży się z każdym żądaniem automatycznie, więc po prostu uaktualnienie strony da ci kolejne 300 sekund. – Gordon

+0

btw. tam mała literówka;) '$ namespace = new Zend_Session_Namespace ('Zend_Auth');' I tak masz rację, resetuje się za każdym razem, gdy jest wywoływany, z jakiegokolwiek powodu twoje drugie rozwiązanie nie działało (wstaw to do init()) - ale pierwszy działa po prostu dandy: D Wielkie dzięki! – Hannes

1

Jeśli używasz innego nazw dla sesji Zend_Auth można zrobić to tak:

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

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

dziękuję za awnser, chociaż nie mogę go zweryfikować, ponieważ dana aplikacja nie jest już obsługiwana – Hannes

Powiązane problemy