Zend_Session失去了数据......但为什么呢?

时间:2012-09-04 20:25:35

标签: php zend-framework zend-session

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

在我的Bootstrap中,我有

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         
            );

如果未设置session-key(带有关键字),则新数据仅设置为session。我用zend调试器检查过,一切运行良好。

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

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

我打电话的时候:

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

我明白了:

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

所以,它就在那里,它已经杀死了我的价值。

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

2 个答案:

答案 0 :(得分:1)

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

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

如果错误仍然存​​在,请在更改会话数据时扩展Zend_Session_Namespace并放置echo(用于调试),然后您将能够知道它是否被另一块没有你的确认的代码。

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

答案 1 :(得分:0)

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

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

等等。 谢谢!