Les instances Zend_Session_Namespace
fournissent l'API primaire pour manipuler les données de session dans le Zend Framework. Les espaces de nommage sont utilisés pour isoler toutes les données de session, bien qu'un espace de nommage 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échanisme 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 à lui, alors que Zend_Session
et Zend_Session_Namespace
fournissent le plus efficacement et solidement leur suite de fonctionnalités liées à session.
Si aucun espaces de nommage n'est spécifié lors de l'instanciation de Zend_Session, toutes les données sont stockées de manière transparente dans un espace de nommage appelé "Default
". Zend_Session
n'est pas prévu pour fonctionner directement sur le contenu des conteneurs des espaces de nommage. Au lieu de cela, nous utilisons Zend_Session_Namespace
. L'exemple ci-dessous montre l'utilisation de cet espace de nommage 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 :
Exemple 30.1. Compter le nombre de pages vues
<?php require_once 'Zend/Session.php'; $defaultNamespace = new Zend_Session_Namespace('Default'); // Utiliser la méthode magique __isset() dans Zend_Session_Namespace: if (isset($defaultNamespace->numberOfPageRequests)) { $defaultNamespace->numberOfPageRequests++; // ceci s'incrémente à chaque chargement de page. } else { $defaultNamespace->numberOfPageRequests = 1; // première page } echo "Page demandée lors de cette session : ", $defaultNamespace->numberOfPageRequests; ?>
L'un des nombreux avantages de Zend_Session_Namespace apparaît quand de multiples modules utilisent Zend_Session_Namespace et obtiennent une encapsulation pour leurs propres données de session. Zend_Session peut recevoir un paramètre facultatif $namespace dans son constructeur, ce qui permet aux autres composants, modules, et code spécifique d'être assuré que leurs données sont protégées par une cloison entre les zones de données utilisées par les autres composants, modules et code spécifique. Les espaces de nommage fournissent une manière efficace et populaire de protéger un sous-ensemble de données de session contre un changement accidentel. Les noms des espaces de nommage 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 du Zend Framework devraient employer un nom d'espage de nommage commençant par "Zend_".
Exemple 30.2. Nouvelle méthode : les espaces de nommage évitent les collisions
<?php // Dans le composant Zend_Auth require_once 'Zend/Session.php'; $authNamespace = new Zend_Session_Namespace('Zend_Auth'); $authNamespace->user = "monusername"; // Dans un composant service web $webServiceNamespace = new Zend_Session_Namespace('Un_Service_Web'); $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 nommage respectif.
Zend_Session_Namespace
fournit une interface IteratorAggregate complète, incluant le support de l'instruction foreach
:
Les accesseurs usuels sont disponibles avec les méthodes magiques __set(), __unset(), __isset(), et __get(). Les méthodes magiques ne devraient pas être utilisées directement, excepté à l'intérieur d'une sous-classe de Zend_Session. Au lieu de cela, utilisez les opérateurs normaux pour appeler ces méthodes magiques, comme :