第30章 Zend_Session

目次

30.1. 導入
30.2. 基本的な使用法
30.2.1. チュートリアル
30.2.2. セッション名前空間の順次処理
30.2.3. セッション名前空間へのアクセス方法
30.3. 高度な使用法
30.3.1. セッションの開始
30.3.2. セッション名前空間のロック
30.3.3. 名前空間の有効期限
30.3.4. コントローラでのセッションのカプセル化
30.3.5. 名前空間内での Zend_Session_Namespace のインスタンスをひとつに制限する
30.3.6. 名前空間での配列の使用
30.3.7. セッションと認証の共用
30.3.8. ユニットテストでのセッションの使用
30.4. グローバルセッションの管理
30.4.1. Zend_Session::setOptions()
30.4.2. オプション
30.4.3. エラー
30.4.4. regenerateId()
30.4.5. rememberMe(integer $seconds)
30.4.6. forgetMe()
30.4.7. sessionExists()
30.4.8. destroy(bool $remove_cookie = true, bool $readonly = true)
30.4.9. stop()
30.4.10. writeClose($readonly = true)
30.4.11. expireSessionCookie()
30.4.12. setSaveHandler(Zend_Session_SaveHandler_Interface $interface)
30.4.13. namespaceIsset($namespace)
30.4.14. namespaceUnset($namespace)
30.4.15. namespaceGet($namespace, $name = null)
30.4.16. getIterator()
30.5. 動作原理

30.1. 導入

このドキュメントの最新版 も参照ください。また、 Zend Framework Auth team は皆さんのフィードバックや協力をお待ちしています。 メーリングリストは fw-auth@lists.zend.com です。

PHP で書かれたウェブアプリケーションでは、セッション を使用してサーバ側 (状態を保持するデータ) とクライアント側 (特定のユーザエージェント。たとえばウェブブラウザ) の論理的な一対一の関係を表します。 Zend_Session はセッションデータの管理と保持を行い、クッキーのデータを論理的に補完し、 同一クライアントからの複数ページにわたるリクエストを扱います。 クッキーのデータと異なり、セッションデータはクライアント側には保存されません。 セッションデータがクライアントと共有されるのは、 サーバ側のソースコードの脆弱性のために クライアントからのリクエストへの応答として使用できるようになった場合のみです。 このコンポーネントのドキュメントにおいて「セッションデータ」は、 $_SESSION[] に保存されたり Zend_Session で管理されたり、 独立して Zend_Session_Namespace のアクセス用オブジェクトで管理されたりする サーバ側のデータをさすものとします。 セッション名前空間 により、セッションデータに対して昔ながらの 名前空間 を使用したアクセスが可能となります。 これは、文字列をキーとした連想配列形式で実装されています。 (通常の PHP の配列と同じです)。

Zend_Session_Namespace は、$_SESSION[] の一部を切り取って名前空間つきでアクセスするためのオブジェクトのインスタンスを作成します。 Zend_Session コンポーネントは、PHP の既存の ext/session をラップして管理用インターフェイスを提供します。また、 Zend_Session_Namespace のセッション名前空間を持続させるための API も提供します。 Zend_Session_Namespace は、標準化されたオブジェクト指向のインターフェイスで 名前空間を扱います。これは、PHP 標準のセッションの仕組みを使用しています。 匿名セッションおよび "ログイン" セッション名前空間の両方をサポートしています。 ZF の認証コンポーネントである Zend_Auth は、 Zend_Session_Namespace を使用して "Zend_Auth" 名前空間に認証済みユーザの情報を保存します。 Zend_Session_Core が内部で使用しているのは通常の PHP ext/session 関数なので、おなじみのオプションや設定が適用されます (http://www.php.net/session を参照ください)。これは、オブジェクト指向で扱えたりデフォルトをサポートしていたりという点で Zend Framework とうまく組み合わせることができます。 したがって、クッキーに記録したり URL に埋め込まれたりする 標準のセッション ID を用いて、クライアントとセッション状態データの関連付けが行われます。

クラスタを構成するサーバ群のひとつにクライアントから接続している際には、 デフォルトの セッション保存ハンドラ は、この関連を保持するという問題を解決できません。 セッションの状態に関するデータは、(接続している) そのサーバにしか保存されないからです。 このような場合に対応できるような保存ハンドラを将来提供する予定です。 使用できるようになった時点でここで説明します。 保存ハンドラの案を出したり実際に作成したりした場合は、メーリングリスト fw-auth@lists.zend.com にお知らせください。 Zend_Db 互換の保存ハンドラは、このメーリングリストに投稿されます。