Zend_Session は、ext/session およびスーパーグローバル変数 $_SESSION
を使用して、セッション状態のデータを保存します。
$_SESSION
はグローバルにアクセス可能ですが、
開発者はこれに対して直接アクセスするのはやめるべきです。Zend_Session を用いることで、
セッション関連の機能をより効率的かつ安全に使用できるようになります。
何も名前空間をしていせずに Zend_Session のインスタンスを作成すると、
すべてのデータは透過的に 'Default'
名前空間に保存されます。
以下の例は、'Default'
名前空間を使用して
ユーザがそのページを何回閲覧したかを数える方法を示すものです。
以下のコード (のうち echo
以外の部分)
を、ZF の起動ファイル内に記述します
例 21.1. ページビューの数え方
<?php require_once 'Zend/Session.php'; $session = new Zend_Session(); $session->numberOfPageRequests++; // これが、ページが読み込まれるたびに加算されます echo "このセッションでページがリクエストされた回数: ", $session->numberOfPageRequests; ?>
Zend_Session の数多くの利点のうちのひとつに、 複数のモジュールがそれぞれ異なるレベルのカプセル化を行えるという点があります。 Zend_Session のコンストラクタには、オプションの引数 $namespace を渡すことができます。これを使用することで、 あるコンポーネントやモジュール、コードのデータが 他のコンポーネントやモジュール、コードから守られるようになります。 名前空間は、セッション状態データが不意に変更されてしまうことを防ぐ 効率的で "安全な" 仕組みを提供します。 名前空間名に使用できるのは、空でない PHP 文字列です。 先頭にアンダースコア ('_') 文字を使用することはできません。 'Zend_' で始まる名前空間を使用できるのは、Zend Framework のコアコンポーネントのみです。
例 21.2. 新しい方法: 名前空間の衝突を避ける
<?php // Zend-Auth コンポーネント用 require_once 'Zend/Session.php'; $auth_session = new Zend_Session('Zend_Auth'); $auth_session->user = "myusername"; // ウェブサービスコンポーネント用 $web_service_session = new Zend_Session('Some_Web_Service'); $web_service_session->user = "mywebusername"; ?>
上の例は、この下のコードと同じ結果になります。 ただ、上の例ではセッションデータがそれぞれの名前空間でカプセル化されています。 さまざまなチェックを Zend_Session_Core のシングルトンパターンと組み合わせることで、 カプセル化を行います。
Zend_Session は
IteratorAggregate インターフェイス
を完全に実装しており、foreach
文をサポートしています。