0

私はこのZend_Sessionに非常に慣れていません。ZendFrameworkアプリを実行しています。今、私はそれにいくつかの「機能」を追加したいと思います。その機能の1つは、セッションに含まれるデータを必要とするため、すべてのサイトに保存され、ユーザーがアクセスします。

私のブートストラップでは、私は持っています

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エントリのサイズです。エントリがありますが、nullです。

$_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 に答える