30.5. 動作原理

Zend_Session は、シングルトンである $_SESSION へのすべてのアクセスを、静的メソッドでカプセル化しています。 一般に、Zend_Session および Zend_Session_Namespace コンポーネントを使用する開発者は $_SESSION を直接操作すべきではありません。 しかし、既存のコードを Zend_Session と共存させることも可能です。 その場合は、Zend_Session_Namespace の名前空間を使用することで、既存のコードが $_SESSION で使用しているキーとだぶらないようにします。 現在、既存のコード (あるいは他の PHP アプリケーション) と予期せずセッション状態データを共有してしまうという問題の発生を 検出することはできません。 したがって、他の節で挙げられているガイドラインに従い、 できるだけ混乱を生じないよう気をつけなければなりません。

グローバルなセッションの管理は、Zend_Session で定義されている 静的な "クラス" メソッド群を使用します。これは、Zend_Session_Namespace および関連コンポーネントが管理するすべてのセッションに影響をおよぼします。 ほとんどの開発者は、Zend_Session を直接使用する必要はないでしょう。

$_SESSION とは異なり、Zend_Session_Namespace はすべてのセッションデータを別々の名前空間に分離します。 データを PHP の配列に保存し、その配列を $_SESSION に保存するのです。この配列のキーが名前空間となります。 Zend_Session_Namespace のインスタンスを作成すると、選択した名前空間用の、 一意でない "ウィンドウ" が返されます。 指定したキー (名前空間名) に関連付けられる名前空間はひとつだけですが、 複数の "ウィンドウ" で同じ名前空間を使うことが可能です。 これらのインスタンスは、セッション状態データの操作を 指定した名前空間内に制限するはたらきをするもので、 Zend_Session_Namespace のインスタンスを作成する際に明示的に名前を指定します。 Zend_Session のインスタンスは、このようにしてローカルスコープの変数 (Zend_Session_Namespace インスタンスオブジェクト) によるスコープの制限を行います。 これにより、セッション名前空間を効率的にローカルスコープに取り込みます。