使用Zend_Application的奇怪Zend_Session行为

时间:2012-05-22 15:38:59

标签: zend-framework zend-session zend-application zend-app-bootstrap

我写信是为了看看你们中有人之前是否遇到过这个问题,并且有机会理解为什么会发生这种情况。

这就是故事。

我在Zend Framework v.1.8之前开发了许多ZF应用程序,然后我已经停止了大约18个月。现在我必须开始一个新的项目,我决定再次使用Zend Framework。

在我的本地服务器上安装了1.11.3版本,因此我没有下载最新版本。

在将Zend_Application与Bootstrap.php文件一起使用之前,我曾经开始将会话选项放在我的config.ini文件中,然后将它们加载到Zend_Session实例中,如下所示:

的config.ini

sessions.name = NAME
sessions.use_only_cookies = 1
sessions.save_path = APPLICATION_PATH "/../tmp/sessions"
sessions.strict = on
sessions.remember_me_seconds = 1800
在启动应用程序之前

index.php(进入公共webserver目录):

Globals::startSession();

使用各种有用方法的自定义Globals类:

    class Globals
    {
            static public function startSession()
            {
            $sessions_conf = self::getConfig()->sessions;
            Zend_Session::setOptions($sessions_conf->toArray(););
            Zend_Session::start();
            }
    }

这一直运行良好,启用我的会话(与Zend_Session_Namespace一起使用)并将会话文件存储在save_path中。

使用Zend_Application手册告诉我们只需将会话选项存储在"部分"下的application.ini文件中。资源和Zend_Session将自动配置......

我是这样做的:

; SESSIONS
resources.session.name = NAME
resources.session.use_only_cookies = 1
resources.session.save_path = APPLICATION_PATH "/../tmp/sessions"
resources.session.strict = on
resources.session.remember_me_seconds = 1800

它没有奏效。 所以我尝试使用(不是同时!)Bootstrap.php文件中的_initSession()和_initForceSession()方法,将它们放在类的开头并将代码写入其中:

$this->bootstrap('session');

但是会话永远不会工作,数据没有存储在http请求之间,会话文件从未写入save_path ...

请有人,请告诉我这是否属于正常行为(也许我错过了某些地方......)?

显然我解决了重新实现我的旧方法的问题(并且它完美地运行),但我想学习如何正确使用它。

提前致谢。

2 个答案:

答案 0 :(得分:1)

这应该是打开它的情况,它可以使它变得容易。

我认为您在application.ini中设置选项的方式可能有问题:

; SESSIONS
resources.session.name = NAME
resources.session.name.use_only_cookies = 1
resources.session.name.save_path = APPLICATION_PATH "/../tmp/sessions"
resources.session.name.strict = on
resources.session.name.remember_me_seconds = 1800

根据reference manual

  

要设置会话配置选项,请包含基本名称(部分   “session。”之后的名称作为传递给的数组的键   了Zend_Session :: setOptions()。

正确设置选项后,引导程序_initSession()就可以正常工作。

public function _initSession()
{
Zend_Session::start();
}

P.S。我一直使用Zend_Session_Namespace但很少处理全局会话。

答案 1 :(得分:0)

在你的Bootstrap.php中添加

public function _initSession()
{
Zend_Session::start();
}

会话选项可以在application.ini

中设置