更改会话ID并将数据保存在PHP Zend中
我想在用户登录到带有我自己前缀的自定义随机会话id后更改会话id 但是,当我执行以下操作时,会话数据丢失更改会话ID并将数据保存在PHP Zend中,php,session,zend-framework,session-variables,Php,Session,Zend Framework,Session Variables,我想在用户登录到带有我自己前缀的自定义随机会话id后更改会话id 但是,当我执行以下操作时,会话数据丢失 Zend_Session:setId('my-new-id'); Zend_Session:start(); 但是,如果我执行以下操作,会话数据仍然可用 Zend_Session:regenerateId(); Zend_Session:start(); 知道如何解决此问题吗?请参见: 最佳做法是在会话启动后调用此函数。如果在会话启动之前调用,会话id将在启动时重新生成 另请参见:对于Z
Zend_Session:setId('my-new-id');
Zend_Session:start();
但是,如果我执行以下操作,会话数据仍然可用
Zend_Session:regenerateId();
Zend_Session:start();
知道如何解决此问题吗?请参见:
最佳做法是在会话启动后调用此函数。如果在会话启动之前调用,会话id将在启动时重新生成
另请参见:对于ZF1:
$defaultNamespace = new Zend_Session_Namespace();
if (!isset($defaultNamespace->initialized)) {
Zend_Session::regenerateId();
$defaultNamespace->initialized = true;
}
添加:
然后试试这个:
$commit = Zend_Session::namespaceGet('Default');
Zend_Session::writeClose(false);
// ^ session_commit(); // see Advanced Usage: http://framework.zend.com/manual/1.12/en/zend.session.advanced_usage.html#zend.session.advanced_usage.starting_a_session
.. change id with session_id("my-new-id");
// start new session ...
$namespace = new Zend_Session_Namespace('Default');
foreach($commit as $idx => $data){
$namespace->$idx = $data;
}
然而调用Zend_会话::writeClose()后,无法使用的Zend_会话::start()版本重新启动会话
见本期:
- 固定版本:
和/或使用Zend_会话::RegeneratID();与Zend_会话::setId()相比,它仍然没有多大帮助,因为我希望生成一个带有预定义前缀的会话id,例如myprefix-**********************详细信息仍然丢失:(奇怪-\-使用最新的变体应该可以,因为Zend_会话:setId()包装的会话id($id);所有丢失数据的问题都应该得到修复/使用$commit您应该已经从Zend_会话_名称空间(“默认”)复制了所有数据…需要更多代码的详细信息因此,当我转到Zend_会话::名称空间获取(“默认”);除了新的Zend_会话_名称空间(“默认”)之外,我没有得到任何数据;这是可行的。但是,当出于某种原因使用“2件事”选项时,不会应用新的会话数据。namespaceGet仅检索会话名称空间的所有数据。“Default”默认为名称(请参阅文档)。更改id之前在何处以及如何分配会话数据?请检查-
$commit = Zend_Session::namespaceGet('Default');
Zend_Session::writeClose(false);
// ^ session_commit(); // see Advanced Usage: http://framework.zend.com/manual/1.12/en/zend.session.advanced_usage.html#zend.session.advanced_usage.starting_a_session
.. change id with session_id("my-new-id");
// start new session ...
$namespace = new Zend_Session_Namespace('Default');
foreach($commit as $idx => $data){
$namespace->$idx = $data;
}