【发布时间】:2012-09-04 20:25:35
【问题描述】:
我对 Zend_Session 很陌生。 我确实有一个 Zend Framework 应用程序正在运行;现在我想为它添加一些“功能”。其中一项功能需要 Session 中包含一些数据,因此它存储在用户将访问的所有站点上。
在我的引导程序中,我有
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initSession() {
Zend_Session::setOptions(array(
'use_only_cookies' => 'on',
'remember_me_seconds' => 864000
));
Zend_Session::start();
}
}
在我的模型中,有一个函数可以将给定关键字的数据存储到 $_SESSION 中:
$_SESSION['foo'][urlencode($keyword)] = array(
'data' => $base->some->foo[0]->fish->data
);
如果未设置会话密钥(带有关键字),则仅将新数据设置为会话。我用zend调试器检查过,一切运行良好。
现在,当我首先调用页面时,一切运行良好。当我重新加载页面(或移动到另一个页面)时,会话中的值消失了。所以,确切地说,keys 在那里,$_SESSION 数组(例如)是 20 个大小的条目。有一个条目,但它是空的。
$_SESSION['foo']['my+foo']['data'] = null
当我打电话时:
Zend_Debug::dump($_SESSION['foo']['my+foo']);
我明白了:
array (size=1)
'data' => null
所以,它就在那里,它扼杀了我的价值。
当我使用简单的 session_start() 时,让它运行的神奇巫术是什么?
【问题讨论】:
-
为什么不使用 Zend_Session? Zend Session 没有那么简单的内部结构,可能只是删除您的数据,同时保存自己的信息。
-
这是您尝试保存到会话的 SimpleXML 数据吗?如果是这样,请在将其插入会话时尝试转换为字符串:
$_SESSION['foo'][urlencode($keyword)] = array( 'data' => (string)$base->some->foo[0]->fish->data ); -
最好的猜测是您在请求循环中的某处覆盖了您的数据并且不知道它(我已经这样做了,但很难找到)。查看Zend_Session_Namespace
-
抱歉,没有变化。尝试过 Zend_Session 和简单的 session_start() 东西,都一样。尝试以上面的方式存储simplexml数据,没有变化。并且:它是一个非常非常简单的 ZF 项目,我在请求循环中什么都不做,这不是标准的一部分(我什至不知道如何更改它,即使我想要这样 ;))。为什么我的会话数据为空?
-
所以,我明白了,我必须将 simplexml 对象中的每一个值都转换为我的会话的表示形式,然后它将被保存...好的,感谢您让我走上正确的道路,draw010,你明白了;)
标签: php zend-framework zend-session