2010-03-24 90 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'); 
}