2010-03-24 93 views
2

所以我在Zend框架中啓動並期望實現一個站點範圍的「用戶」會話....我可以輕鬆地從所有模塊/控制器訪問應用。在Zend框架中處理會話處理的最佳方式

我想,我應該做一個新的命名空間在圖書館和延長控制器,如:

class MYCUSTOMLIB_Controller_Action extends Zend_Controller_Action 
{ 
    protected $_userSession; 

    function preDispatch(Zend_Controller_Request_Abstract $req) 
    { 
     $this->_userSession = new Zend_Session_Namespace('user'); 
    } 
} 

,然後有來自我所有的控制器/模塊/等延伸?

或者我應該創建一個插件還是什麼?你將如何去使這個插件將用戶會話傳遞給控制器​​?

或者我在自舉中做?再次如何傳遞給控制器​​?

也應該使用Zend_Session_Namespace或Zend_Http_Cookie以及我如何加密和xss清理cookie或是自動完成的?

回答

6

我將在引導初始化過:

//Bootstrap.php 
protected function _initUserSession() 
{ 
    return new Zend_Session_Namespace('user'); 
} 

然後我會用一個動作助手:

// library/App/Controller/Action/Helper/Session.php 
class App_Controller_Action_Helper_Session extends Zend_Controller_Action_Helper_Abstract 
{ 
    function direct() 
    { 
     return $this->getFrontController()->getParam('userSession'); 
    } 
} 

你訪問它在你的控制器是這樣的:

function indexAction() 
{ 
    $session = $this->_helper->session; 
} 
+0

你確定View輔助器嗎? – 2010-03-24 10:08:15

+0

這看起來像一個視圖助手和動作助手混合:)視圖助手也使用直接方法()嗎?對於視圖幫手,它應該是session(),不是嗎? – takeshin 2010-03-24 18:25:00

+1

對不起。它應該是一個行動幫手!我更新了代碼。 – 2010-03-25 11:09:32

0

您應該在引導程序中初始化您的會話。你可以把它放在Zend_Registry中並以這種方式訪問​​它,或者通過調用$ this-> getInvokeArg('bootstrap')來訪問你的引導程序。

// in your controllers  
public function init() 
{ 
    $bootstrap = $this->getInvokeArg('bootstrap'); 
    $this->_session = $bootstrap->getResource('session'); 
}