2010-10-15 11 views
7

Ich benutze Zend_Auth für eines meiner Projekte, aber bis jetzt habe ich noch nicht herausgefunden, wie man die Lifetime für die Session einstellt, oder wie man es verlängert (sagen wir mal 5 Minuten und sollte, dass zurückgesetzt, wenn der Benutzer eine Aktion) macht, hier ist meine Initialisierung Code:Setzen und Erweitern der Session Lifetime mit 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); 
      } 
     } 

diese Ant, wie ich überprüfen, ob der Benutzer angemeldet ist:

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

es liegt direkt dort wahrscheinlich vor von mir, aber ich kann es einfach nicht herausfinden, helfen? Bitte? Ziemlich Bitte? : D

Antwort

13

Der Authentifizierungsstatus wird im registrierten Auth Storage gespeichert. Standardmäßig ist dies Zend_Session. Sie können set an expiration time to the Zend_Auth namespace, z.B.

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

Sie können auch globally configure Zend_Session über

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

auch jeder, wie ich kann „refresh“, dass Leben im Falle einer Aktion? – Hannes

+0

@Hannes Ich denke, die Ablaufzeit wird bei jeder Anfrage automatisch aktualisiert, so dass Sie die Seite einfach um weitere 300 Sekunden aktualisieren können. – Gordon

+0

btw. kleiner Tippfehler dort;) '$ namespace = new Zend_Session_Namespace ('Zend_Auth');' Und du hast Recht, es wird jedes Mal zurückgesetzt wenn es aufgerufen wird, aus welchem ​​Grund auch immer deine zweite Lösung nicht funktioniert (setze es int init()) - aber der erste funktioniert nur Dandy: D Vielen Dank! – Hannes

1

Wenn Sie anderen Namespace für Zend_Auth Sitzung verwenden, können Sie es wie folgt tun:

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

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

danke für Ihre Awnser, obwohl ich nicht in der Lage, es zu überprüfen, da die betreffende Anwendung nicht mehr gepflegt wird – Hannes