2012-04-05 82 views
0

我有一個代表我身份的類,其中包含幾條信息。這是簡短的版本。喚醒時的zend_auth身份

class Auth_User { 

    private $id; 
    private $current_role; 

    public function __construct($id, $current_role) { 
     $this->id = (int) $id; 
     $this->current_role = (string) $current_role; 
    } 

    public function __wakeup() { 
     if (/*$current_role is not valid*/) { 
      /*clear identity and redirect to login*/ 
     { 
    } 
} 

我的問題我該如何安全地清除標識並重定向到喚醒方法登錄? 如果我做了以下,它似乎運行在一個無限循環。

Zend_Auth::getInstance()->clearIdentity(); 
$this->_helper->redirector('index', 'index'); 
+0

那麼它應該做的伎倆,你可以提供更多的細節,使一些人可以給你一個更好的解決方案。 – 2012-04-05 17:05:13

+0

我認爲這個問題是當我調用Zend_Auth :: getInsance() - > clearIdentity();它一遍又一遍地調用__wakeup函數。所以它的無限遞歸。 – Jeremiah 2012-04-06 12:19:37

回答

0

的事實,你有一個__wakeup()方法意味着你有一個__sleep()方法。

我在這種情況下可能會看到的做法是在__sleep()方法中設置Zend_Session_Namespace('Zend_Auth')到期。

然後針對__wakeup()方法中的命名空間測試__isset()。我認爲這種方法可能有效。

如果你只想以清除__sleep()身份可能是一個好主意,以及,然後就重定向到login()__wakeup()

希望我沒有完全在左外野...