30.2. Usage basique

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.

30.2.1. Tutoriel d'exemples

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.

Exemple 30.3. Ancienne méthode : accès aux sessions PHP

<?php
    $_SESSION['Zend_Auth']['user'] = "monusername";
    $_SESSION['Un_Service_Web']['user'] = "monebusername";
?>

30.2.2. Enumérer les espaces de nommage de session

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

Exemple 30.4. Enumeration des sessions

<?php
    // Zend_Session est énumérable
    require_once 'Zend/Session.php';
    $aNamespace = new Zend_Session_Namespace('un_namespace_avec_des_donnes_presentes');
    foreach ($aNamespace as $index => $valeur) {
        echo "aNamespace->$index = '$valeur';\n";
    }
?>

30.2.3. Accesseurs pour les espaces de nommage de session

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 :

Exemple 30.5. Accéder aux données de session

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