21.2. 基本的な使用法

Zend_Session は、ext/session およびスーパーグローバル変数 $_SESSION を使用して、セッション状態のデータを保存します。 $_SESSION はグローバルにアクセス可能ですが、 開発者はこれに対して直接アクセスするのはやめるべきです。Zend_Session を用いることで、 セッション関連の機能をより効率的かつ安全に使用できるようになります。

21.2.1. チュートリアル

何も名前空間をしていせずに 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 のシングルトンパターンと組み合わせることで、 カプセル化を行います。

例 21.3. 古い方法: PHP のセッションへのアクセス

<?php
    $_SESSION['Zend_Auth']['user'] = "myusername";
    $_SESSION['Some_Web_Service']['user'] = "mywebusername";
?>

21.2.2. セッション名前空間の順次処理

Zend_Session は IteratorAggregate インターフェイス を完全に実装しており、foreach 文をサポートしています。

例 21.4. セッションの順次処理

<?php
    // Zend_Session は順次処理が可能です
    require_once 'Zend/Session.php';
    $my_session = new Zend_Session();
    foreach ($my_session as $name => $value) {
        ....
    }
?>

21.2.3. セッション名前空間へのアクセス方法

通常のアクセス用に、マジックメソッド __set()、__unset()、__isset() および __get() をサポートしています。これらのマジックメソッドを、 Zend_Session のサブクラス以外から直接使用してはいけません。その代わりに、 以下のように通常の演算子を使用します。

例 21.5. セッションデータへのアクセス

<?php
            $object->property = $value; echo
            (isset($object->property) ? 'set' : 'unset');
?>