【问题标题】:Configuring Zend_Session Through Zend_Application通过 Zend_Application 配置 Zend_Session
【发布时间】:2010-03-02 05:19:48
【问题描述】:

所以我使用 Zend_Tool 构建了一个站点模板并将这些参数添加到 application.ini

resources.session.saveHandler.class = "Zend_Session_SaveHandler_DbTable"
resources.session.saveHandler.options.name = "session"
resources.session.saveHandler.options.primary.session_id = "session_id"
resources.session.saveHandler.options.primary.save_path = "save_path"
resources.session.saveHandler.options.primary.name = "name"
resources.session.saveHandler.options.primaryAssignment.sessionId = "sessionId"
resources.session.saveHandler.options.primaryAssignment.sessionSavePath = "sessionSavePath"
resources.session.saveHandler.options.primaryAssignment.sessionName = "sessionName"
resources.session.saveHandler.options.modifiedColumn = "modified"
resources.session.saveHandler.options.dataColumn = "session_data"
resources.session.saveHandler.options.lifetimeColumn = "lifetime"

问题似乎不在于会话资源或被调用的 saveHandler,而是似乎 PHP / Zend 甚至没有尝试在数据库中设置我的会话。

除非我删除会话资源所需的选项并且我在不同的 Zend 类中放置检查以查看它们是否正在运行,否则我不会收到任何错误;他们是。

我目前的猜测是我需要更改 php.ini 中的某些内容,以便 Zend_Session 能够覆盖默认会话处理。我正在使用 Zend Server 进行此测试。

回复

我检查了 session.auto_start,它被设置为 0。

我也通过不使用任何数据库处理程序来测试它,而是尝试更改同样失败的路径。

从我的设置可以看出, Zend_Session_SaveHandler_DbTable::__construct 正在被调用,并且我的 resources.db 设置高于我的会话,并且可以用于其他所有操作。

除此之外,我目前的 saveHandlers.options 数据设置不正确,并且我在 StackOverflow 上看到过其他帖子,这些帖子与由于错误的 saveHandler 配置导致的错误有关。

正如我上面所说,我认为这与 PHP 没有调用传递的函数进行会话处理有关。我知道如果您想设置自己的会话管理,您可以连接到这些调用并提供要在每个状态上执行的回调函数(打开关闭读写等)。

我只是对 PHP.ini 设置知之甚少,无法知道是否需要启用特定设置以允许修改会话管理。

【问题讨论】:

    标签: zend-framework zend-application


    【解决方案1】:

    在你的引导程序中试试这个:

    protected function _initForceSession()
    {
        $this
                ->bootstrap('db')
                ->bootstrap('session');
    }
    

    您也可以尝试将我的补丁应用到 Zend_Session 以查看该会话已经开始并且您无法更改 savehandler: http://framework.zend.com/issues/browse/ZF-7915 。我不记得所有细节,但是这些组件中存在一些不兼容...

    【讨论】:

    • 是的,尽管数据库是在 session_handler 之前创建的并且更改它们的顺序导致数据库异常,但不包括引导程序中的 __initForceSession 导致您修改后的 Session.php 文件将会话标记为已经设置好了。我很惊讶没有检查会话是否已创建。
    【解决方案2】:

    当使用 DB 处理程序进行会话时,您必须make sure the DB is initialized before the Session Resource。 db 连接将在引导期间设置为处理程序作为适配器。如果这不能解决问题,请尝试设置 Session handler manuallymake sure session.auto_start is disabled in PHP.ini

    【讨论】:

    • 回复见上文。概要.. 我认为这与 php 允许您挂钩以进行会话管理的回调挂钩以及由于某种原因(可能是设置)它们没有被使用的原因有关。 IE(打开关闭读写)。
    • @Ballsacian1 不知道,抱歉。您可以尝试使用 Zend_Debugger 或 XDebug 逐步完成引导过程,看看哪里出错了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    相关资源
    最近更新 更多