所以我需要从Zend访问现有的Session。不要问为什么,我不喜欢谈论它。无论如何,我已经发现在初始化会话之前我可以从引导程序访问它。我有以下代码尝试将其拉出并将其转移过来:
protected function _initSession() {
session_start();
$values = $_SESSION;
session_write_close();
$db = Zend_Db::factory('Pdo_Mysql', array(
'host' =>'localhost',
'username' => 'uname',
'password' => '******',
'dbname' => 'dbname'
));
Zend_Db_Table_Abstract::setDefaultAdapter($db);
$sessionConfig = array(
'name' => 'Sessions',
'primary' => 'sessionID',
'modifiedColumn' => 'lastModifiedTime',
'dataColumn' => 'data',
'lifetimeColumn' => 'lifetime'
);
$saveHandler = new Zend_Session_SaveHandler_DbTable($sessionConfig);
Zend_Session::setSaveHandler($saveHandler);
Zend_Session::start();
$old = new Zend_Session_Namespace('OLD');
$old->values = $values;
}
当它命中Zend_Session::start()
时声称会话已经启动,这会让人感到窒息。但是我已经打电话给session_write_close()
来关闭会话,据我所知,谷歌的重新启动之前已经完成的会话并没有什么问题。那为什么会窒息?它是ZF特有的东西吗?关闭会话还需要做些什么吗?是什么给了什么?
答案 0 :(得分:0)
你不能。
最重要的是,如ZF documentation:
中所述不要直接使用PHP的»session_start()函数。如果直接使用session_start(),然后开始使用Zend_Session_Namespace,则Zend_Session :: start()将抛出异常(“会话已经启动”)。
所以你的代码看起来应该是这样的:
Zend_Session::start();
$values = $_SESSION;
Zend_Session::writeClose();
但是在Zend / Session.php:418中,我们有:
if (self::$_sessionStarted && self::$_destroyed) {
require_once 'Zend/Session/Exception.php';
throw new Zend_Session_Exception('The session was explicitly destroyed during this request, attempting to re-start is not allowed.');
}
因此,ZF不支持您执行此操作的方式(如建议:使用两个不同的请求或使用批处理脚本)。
答案 1 :(得分:0)
我今天面临同样的问题,所以我读了你的博客,但仍然进行了研究,所以我找到了一种与你分享的方式。
只需使用php“session_start()”而不是“Zend_Session :: start();”
“过Zend_Session :: start();”在会话结束后不起作用,所以你可以使用php session_start();
如果您找到任何好的解决方案,请更新我:)