所以我使用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 :: __构造,并且我的resources.db设置在我的会话之上,并且正在为其他一切工作。
除了目前我还没有正确设置saveHandlers.options数据,我在StackOverflow上看到了其他帖子,这些帖子与badHandler配置错误有关。
正如我上面所说,我认为它与PHP有关,而不是调用传递的会话处理函数。我知道如果你想设置自己的会话管理,你可以连接到这些调用,并提供在每个状态上执行的回调函数(打开关闭读写等)。
我对PHP.ini设置知之甚少,以了解是否需要启用特定设置以允许修改会话管理。
答案 0 :(得分:2)
对会话使用数据库处理程序时,必须make sure the DB is initialized before the Session Resource。在bootstrap期间,db连接将作为适配器设置为处理程序。如果这不能解决问题,请尝试设置Session handler manually和make sure session.auto_start
is disabled in PHP.ini
答案 1 :(得分:2)
在你的引导程序中试试这个:
protected function _initForceSession()
{
$this
->bootstrap('db')
->bootstrap('session');
}
您还可以尝试将我的补丁应用于Zend_Session,以查看该会话已经启动,并且您无法更改savehandler:http://framework.zend.com/issues/browse/ZF-7915。我不记得所有细节,但这些组件有一些不兼容性......