所以我在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,还是自动完成?
答案 0 :(得分:6)
我也会在bootstrap中初始化:
//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;
}
答案 1 :(得分:0)
您应该在引导程序中初始化会话。你可以把它放在Zend_Registry中并以那种方式访问它,或者从你的控制器中你可以通过调用$ this-> getInvokeArg('bootstrap')来访问你的引导程序。
// in your controllers
public function init()
{
$bootstrap = $this->getInvokeArg('bootstrap');
$this->_session = $bootstrap->getResource('session');
}