2

セッションには、「グローバル」と「ユーザー」の 2 つの名前空間があります。

「グローバル」にはいくつかの設定があり、「ユーザー」には正しく保存されていると思われるシリアル化されたユーザーオブジェクトがあります:(これはセッションファイルからのものです)

グローバル|a:16:{ [...] s:12:"last_request";i:1301390173; [...] }

user|a:1:{ s:10:"userObject";O:16:"currentUserModel":24:{ [...] s:10:"*_roleId";s:7:"premium"; [...] } }

私がこれを行うとき: $sess = new Zend_Session_Namespace('global');

「currentUserModel.php」をインクルードするとエラーが発生しますが、この時点ではユーザー オブジェクトが必要ないため、これは望ましくありません。「グローバル」名前空間を取得するだけです。

問題は次のとおりです。すべての名前空間に格納されているすべてのオブジェクトのすべてのクラスを含める必要ありますか?それとも、アクセスしている名前空間にあるオブジェクトのクラスだけを含めることは可能ですか?

前もって感謝します

4

1 に答える 1

2

Zend_Session の名前空間は、$_SESSION グローバル変数の上にあるレイヤーにすぎません。PHP では、これらの名前空間は存在しません。Zend_Session では、名前空間は連想配列のキーです。

したがって、セッション名前空間をロードすると、実際には $_SESSION 全体がロードされますが、この Zend_Session を介して他の「名前空間」にアクセスすることはできません。はい: セッションの前にファイル currentUserModel.php を含める必要があります。

もう 1 つの方法は、クラスの __sleep() および __wakeup() マジック メソッドを適切に使用して、クラスのプロパティのみを連想配列としてシリアル化することです。

于 2011-03-29T19:51:15.523 に答える