【发布时间】:2011-07-24 17:49:02
【问题描述】:
所以我需要从 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() 来关闭会话,据我从我的google-fu 中得知,重新启动之前的会话没有任何问题。那么为什么会窒息呢?是采埃孚特有的吗?我还需要做些什么来关闭会话吗?什么给了?
【问题讨论】:
-
虽然我认为没有什么能阻止您关闭和重新打开会话,但我从未见过有人在此过程中实际切换会话存储方法。说到存储方式,这个问题和the last question you asked about ZF's session handling有什么显着不同?确实,同样的解决方案仍然适用:停止将会话存储在数据库中(从而安装会话处理程序)。
-
@Charles 我无法使用该解决方案。对不起,不是我的电话。我需要一个允许我使用数据库保存的解决方案。
-
@Charles 我想这仍然是同一个问题,只是研究了很长时间,尝试了很多不同的东西,感觉就像一个全新的问题!
-
@Daniel,我对困难的失控方面表示哀悼。我不认为这是可以解决的。您能告诉我们更多关于旧版应用程序中的会话数据的信息吗?可能有一些明智的方法可以获取这些数据,而不会试图让 PHP 向后弯曲。
-
我认为您必须使用 2 个无法在同一个 http 请求中关闭/打开会话的请求来处理此问题。
标签: php zend-framework session