Introduction

Usage basique

Les instances Zend_Session_Namespace fournissent l'API primaire pour manipuler les données de session dans Zend Framework. Les espaces de noms sont utilisés pour isoler toutes les données de session, bien qu'un espace de noms par défaut existe pour ceux qui veulent juste un endroit pour stocker toutes leurs données de session. Zend_Session utilise ext/session et sa superglobale spéciale $_SESSION comme mécanisme de stockage pour les données d'état de session. Bien que $_SESSION est toujours disponible dans l'espace global de PHP, les développeurs devraient s'abstenir d'accéder directement à elle, alors que Zend_Session et Zend_Session_Namespace fournissent plus efficacement et plus solidement leur suite de fonctionnalités liées à session.

Chaque instance de Zend_Session_Namespace correspond à une entrée dans le tableau de la superglobale $_SESSION, où l'espace de noms est utilisée comme une clé.

  1. $monNamespace = new Zend_Session_Namespace('monNamespace');
  2.  
  3. // $monNamespace corresponds to $_SESSION['monNamespace']
Il est possible d'utiliser Zend_Session conjointement avec d'autre code utilisant directement $_SESSION. Cependant, pour éviter les problèmes, il est fortement recommandé que ce code utilise seulement les parties de $_SESSION ne correspondant pas aux instances de Zend_Session_Namespace.

Tutoriel d'exemples

Si aucun espace de noms n'est spécifié lors de l'instanciation de Zend_Session_Namespace, toutes les données sont stockées de manière transparente dans un espace de noms appelé "Default". Zend_Session n'est pas prévu pour fonctionner directement sur le contenu des conteneurs des espaces de noms. Au lieu de cela, nous utilisons Zend_Session_Namespace. L'exemple ci-dessous montre l'utilisation de cet espace de noms par défaut, en montrant comment compter le nombre de fois qu'un utilisateur a vu une page sur le site Web. Pour tester cet exemple, ajouter le code suivant à votre fichier d'amorçage ZF :

Example #1 Compter le nombre de pages vues

  1. $defaultNamespace = new Zend_Session_Namespace('Default');
  2.  
  3. if (isset($defaultNamespace->numberOfPageRequests)) {
  4.     $defaultNamespace->numberOfPageRequests++;
  5.     // ceci s'incrémente à chaque chargement de page.
  6. } else {
  7.     $defaultNamespace->numberOfPageRequests = 1;
  8.     // première page
  9. }
  10.  
  11. echo "Page demandée lors de cette session : ",
  12.      $defaultNamespace->numberOfPageRequests;

Quand de multiples modules utilisent des instances de Zend_Session_Namespace ayant différents espaces de noms, chaque module obtient une encapsulation pour ses propres données de session. Le constructeur de Zend_Session_Namespace peut recevoir un paramètre facultatif $namespace, qui permet aux développeurs la partition des données de session dans des espaces de noms séparés. Les espaces de noms fournissent une manière efficace et populaire de protéger un sous-ensemble de données de session contre un changement accidentel dû à des collisions de noms.

Les noms des espaces de noms sont limités à des chaînes de caractères PHP non-vides qui ne commencent par un tiret-bas ("_"). De plus, seuls les composants coeur de Zend Framework devraient employer un nom d'espace de noms commençant par "Zend".

Example #2 Nouvelle méthode : les espaces de noms évitent les collisions

  1. // Dans le composant Zend_Auth
  2. $authNamespace = new Zend_Session_Namespace('Zend_Auth');
  3. $authNamespace->user = "monusername";
  4.  
  5. // Dans un composant service web
  6. $webServiceNamespace = new Zend_Session_Namespace('Un_Service_Web');
  7. $webServiceNamespace->user = "monwebusername";

L'exemple ci-dessus réalise la même chose que celui ci-dessous, excepté que les objets de session ci-dessus préserve l'encapsulation des données de session dans leur espace de noms respectif.

Example #3 Ancienne méthode : accès aux sessions PHP

  1. $_SESSION['Zend_Auth']['user'] = "monusername";
  2. $_SESSION['Un_Service_Web']['user'] = "monwebusername";

Énumérer les espaces de noms de session

Zend_Session_Namespace fournit une » interface IteratorAggregate complète, incluant le support de l'instruction foreach :

Example #4 Énumération des sessions

  1. $unNamespace =
  2.     new Zend_Session_Namespace('un_namespace_avec_des_donnes_presentes');
  3.  
  4. foreach ($unNamespace as $index => $valeur) {
  5.     echo "unNamespace->$index = '$valeur';\n";
  6. }

Accesseurs pour les espaces de noms de session

Zend_Session_Namespace implémente __get(), __set(), __isset(), et __unset(). » Les méthodes magiques ne devraient pas être utilisées directement, excepté à l'intérieur d'une sous-classe. Au lieu de cela, utilisez les opérateurs normaux pour appeler ces méthodes magiques, comme :

Example #5 Accéder aux données de session

  1. $namespace = new Zend_Session_Namespace();
  2. // Espace de noms par défaut
  3.  
  4. $namespace->foo = 100;
  5.  
  6. echo "\$namespace->foo = $namespace->foo\n";
  7.  
  8. if (!isset($namespace->bar)) {
  9.     echo "\$namespace->bar n'existe pas\n";
  10. }
  11.  
  12. unset($namespace->foo);

Introduction