dimanche 3 mars 2013

Sessions et cookies

Exercice 1

1) Déclarer la variable de SESSION CodeUser dans l'espace de nom user et donnez lui 125 comme valeur.


Exercice 2

1) Détruisez la variable de SESSION créée dans l'exercice 1.


Exercice 3

1) Créez le COOKIE TestCookie et donnez lui pour valeur la chaîne "valeur du cookie". Le COOKIE doit être disponible pendant 1 heure.


Exercice 4

1) Détruisez le cookie créé dans l'exercice 3.


Correction de l'exercice 1

Avec Zend, l'utilisation des SESSION passe par l'utilisation de Zend_Session_Namespace

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.

$ nano /www/htdocs/sitezend_avance/application/controllers/IndexController.php
public function indexAction()
{
    $session = new Zend_Session_Namespace('user');
    $session -> CodeUser = 125;

    if ($session -> CodeUser)
    {
        echo 'SESSION : '.$session -> CodeUser;
    }
    else
    {
        echo 'PAS DE SESSION';
    }
}

Mettons en commentaire la déclaration de notre variable CodeUser :

public function indexAction()
{
    $session = new Zend_Session_Namespace('user');
    // $session -> CodeUser = 125;

    if ($session -> CodeUser)
    {
        echo 'SESSION : '.$session -> CodeUser;
    }
    else
    {
        echo 'PAS DE SESSION';
    }
}

On recharge la page et on peut constater que notre session est toujours présente.


Correction de l'exercice 2

Pour détruire notre SESSION nous allons tout simplement utiliser la fonction unset() :

public function indexAction()
{
    $session = new Zend_Session_Namespace('user');
    unset($session -> CodeUser);

    if ($session -> CodeUser)
    {
        echo 'SESSION : '.$session -> CodeUser;
    }
    else
    {
        echo 'PAS DE SESSION';
    }
}

On charge notre page pour vérifier que la session a bien été détruite :


Correction de l'exercice 3

Passons maintenant aux cookies, pour cela nous allons tout simplement utiliser la fonction setcookie() de php :

$ nano /www/htdocs/sitezend_avance/application/controllers/IndexController.php
public function indexAction()
{
    setcookie("TestCookie", 'valeur du cookie', time()+3600);  /* expire dans 1 heure */

    if ($this->getRequest()->getCookie('TestCookie'))
    {
        echo 'COOKIE : ' . $this->getRequest()->getCookie('TestCookie');
    }
    else
    {
        echo 'PAS DE COOKIE';
    }
}

Nous pouvons également récupérer la valeur de notre cookie en faisant un $this->getRequest()->TestCookie, attention toutefois que le nom TestCookie ne soit pas utilisé par une autre variable GET ou POST car le cookie arrive en 3ème position

public function indexAction()
{
    setcookie("TestCookie", 'valeur du cookie', time()+3600);  /* expire dans 1 heure */

    if ($this->getRequest()->TestCookie)
    {
        echo 'COOKIE : ' . $this->getRequest()->TestCookie;
    }
    else
    {
        echo 'PAS DE COOKIE';
    }
}

On test ça en chargeant notre page, pensez à bien charger votre page 2 fois car le cookie est mis en mémoire à un niveau supérieur de notre fonction.

Ce cookie sera disponible pendant 1 heure.


Correction de l'exercice 4

Pour effacer un cookie sur le client, vous devez toujours vous assurer que sa date d'expiration est passée, pour déclencher le mécanisme du navigateur client. Voici comment procéder :

public function indexAction()
{
    setcookie("TestCookie", '', time()-3600);

    if ($this->getRequest()->TestCookie)
    {
        echo 'COOKIE : ' . $this->getRequest()->TestCookie;
    }
    else
    {
        echo 'PAS DE COOKIE';
    }
}

On test et on devrait obtenir le résultat suivant (là encore on doit charger 2 fois la page) :

Aucun commentaire:

Enregistrer un commentaire