Zend Framework应用会话资源和Bootstrapping,有什么问题?

Jas*_*son 8 session zend-framework

嗨:我使用的是最新版本的Zend Framework(1.9.3PL1).我在.ini中设置了以下内容

; Bootstrap session resources
resources.session.save_path = APPLICATION_PATH "/../data/sessions"
resources.session.use_only_cookies = true
resources.session.remember_me_seconds = 864000
Run Code Online (Sandbox Code Playgroud)

接下来我想在我的引导程序中初始化我的会话:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initSession()
    {
        // What goes here!?
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,initSession函数有什么用处?它应该返回什么,如果有的话?

此外,如果我只是在那里开始会话,它不会识别.ini配置(例如,save_path不变).但是,如果将开头移动到控制器,则会识别.ini配置.

编辑:一个可能的解决方案是:

protected function _initSession()
{
    // Based on http://framework.zend.com/issues/browse/ZF-6651
    $session = $this->getPluginResource('session'); 
    $session->init(); 
    Zend_Session::start();
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*rig 11

如果resources.session.*在应用程序配置中使用-options,则必须_initSession()在引导程序中没有方法,因为这些方法将覆盖插件资源session(Zend_Application_Resource_Session)的执行.resources.session.*配置文件中-options 的唯一退出将确保会话将根据您的选项进行初始化.

请阅读Zend_Application,Operation of Operation,详细讨论所谓的资源方法资源插件.


sim*_*nes 7

Stefan非常正确,您将覆盖使用这些应用程序选项的默认会话资源.

如果要定义自己的_initSession()方法并仍然访问这些选项,请使用以下内容:

protected function _initSession() 
{
    $options = $this->getOptions();
    $sessionOptions = array(
        'save_path' => $options['resources']['session']['save_path']
    );    
    Zend_Session::setOptions($options);
    Zend_Session::start();
}
Run Code Online (Sandbox Code Playgroud)