0

我对 Zend_Session 很陌生。我确实有一个 Zend Framework 应用程序正在运行;现在我想为它添加一些“功能”。其中一项功能需要会话中包含的一些数据,因此它存储在用户将访问的所有站点上。

在我的引导程序中,我有

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调试器检查过,一切运行良好。

现在,当我第一次调用页面时,一切都运行良好。当我重新加载页面(或移动到另一个页面)时,会话中的值消失了。所以,准确地说,就在那里,$_SESSION 数组是(例如)20 个大小的条目。有一个条目,但它为空。

$_SESSION['foo']['my+foo']['data'] = null

当我打电话时:

Zend_Debug::dump($_SESSION['foo']['my+foo']);

我得到:

array (size=1)
  'data' => null

所以,它就在那里,它扼杀了我的价值。

当我使用简单的 session_start() 时,让它运行的神奇巫术是什么?

4

2 回答 2

1

按 Ctrl + F 并用Zend_Session_Namespace对象而不是超级全局 $_SESSION 替换所有内容:

$session = new Zend_Session_Namespace('foo');
$session->someData = array(   
    'data' => array('blah') 
);

如果错误仍然存​​在,则在您更改会话数据时扩展Zend_Session_Namespace并放置一个echo(用于调试),那么您将能够知道它是否被另一段代码替换而无需您的确认。

或者更好的是,使用交互式调试器并逐行检查类(即 xDebugger)。那一个永远不会失败;)

于 2012-09-05T02:20:37.533 回答
0

draw010 成功了,我必须将每一个值保存到我的会话中,所以

$_SESSION['foo']['bar'] = array(
 'data' => (int) $base->some->foo[0]->fish->data,
  'moredata' => (string)$base->some->foo[0]->fish->moredata
);

等等。谢谢!

于 2012-09-05T07:56:41.420 回答