2010-10-15 21 views
7

tôi sử dụng Zend_Auth cho một trong các Dự án của tôi, nhưng cho đến nay vẫn chưa biết cách đặt Thời gian cho Phiên hoặc cách mở rộng. nên thiết lập lại rằng khi người dùng thực hiện một hành động), đây là mã khởi của tôi:thiết lập và mở rộng Session Lifetime bằng cách sử dụng 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 này làm thế nào tôi kiểm tra nếu người dùng đang đăng nhập:

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

của nó có lẽ là ngay trước mặt của tôi nhưng tôi không thể hình dung ra, giúp đỡ? Xin vui lòng? Pretty Please? : D

Trả lời

13

Trạng thái xác thực được lưu trữ trong Bộ nhớ lưu trữ đã đăng ký. Theo mặc định, đây là Zend_Session. Bạn có thể set an expiration time to the Zend_Auth namespace, ví dụ:

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

Bạn cũng có thể globally configure Zend_Session qua

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

Ngoài ra bất kỳ làm thế nào tôi có thể "làm mới" mà suốt đời trong trường hợp hành động? – Hannes

+0

@Hannes Tôi nghĩ rằng thời gian hết hạn sẽ tự động làm mới với mỗi yêu cầu, vì vậy chỉ cần cập nhật trang sẽ cung cấp cho bạn thêm 300 giây nữa. – Gordon

+0

btw. typo nhỏ có;) '$ namespace = new Zend_Session_Namespace ('Zend_Auth');' Và có bạn là đúng, nó thiết lập lại mỗi khi nó được gọi, vì lý do gì mà giải pháp thứ hai của bạn không hoạt động (đặt nó vào init()) - Nhưng cái đầu tiên chỉ hoạt động dandy: D Cảm ơn rất nhiều! – Hannes

1

Nếu bạn đang sử dụng không gian tên khác nhau cho phiên Zend_Auth bạn có thể làm điều đó như thế này:

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

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

cảm ơn vì sự chờ đợi của bạn, mặc dù tôi không thể xác minh nó vì ứng dụng được đề cập không còn được duy trì – Hannes

Các vấn đề liên quan