This document is for a version of CakePHP that is no longer supported. Please upgrade to a newer release!
Le component Cookie est un conteneur de la méthode native de PHP
setcookie
. Il inclut également toutes sortes de fonctionnalités pour
rendre l’écriture de code pour les cookies très pratique.
Avant de tenter d’utiliser le component Cookie, vous devez vous assurer
que “Cookie” est listé dans la partie $components de votre controller.
Voici un certain nombre de variables du controller qui vous permettent de configurer la manière dont les cookies sont créés et gérés. Définir ces variables spéciales dans la méthode beforeFilter() de votre controller vous permet de modifier le fonctionnement du component Cookie.
variable Cookie |
par défaut |
description |
---|---|---|
string $name |
“CakeCookie” |
Le nom du cookie |
string $key |
null |
Cette chaîne de caractères est utilisée pour chiffrer la valeur écrite dans le cookie. Cette chaîne devrait être aléatoire et difficile à deviner. Quand on utilise le chiffrement Rijndael ou le chiffrement AES, cette valeur doit être plus grande que 32 bytes. |
string $domain |
“” |
Le nom de domaine autorisé à accéder au cookie. Utilisez par exemple “.votredomaine.com” pour autoriser les accès depuis tous vos sous-domaines. |
int or string $time |
“5 Days” |
Le moment où votre cookie expirera. Les entiers sont interprétés comme des secondes et une valeur de 0 est indique qu’il s’agit d’un cookie de session : il expirera lors de la fermeture du navigateur. Si une chaîne est définie, elle sera interprétée avec la fonction PHP strtotime(). Vous pouvez définir cela à l’intérieur de la méthode write(). |
string $path |
“/” |
Le chemin d’accès au server sur lequel le cookie sera appliqué. Si $path est paramétré à “/foo/”, il ne sera disponible que dans le répertoire /foo/ et tous les sous-répertoires comme /foo/bar/ de votre domaine. La valeur par défaut est le domaine entier. Vous pouvez définir cela directement à l’intérieur de la méthode write(). |
boolean $secure |
false |
Indique que le cookie ne devrait être transmis qu’au travers une connexion HTTPS sécurisée. Quand cela est défini à true, le cookie ne sera défini que si une connexion sécurisé existe.Vous pouvez définir cela directement à l’intérieur de la méthode write() |
boolean $httpOnly |
false |
Défini à true pour fabriquer uniquement des cookies HTTP. Les cookies seulement HTTP ne sont pas disponibles en JavaScript |
Les extraits de code de controller suivants montrent comment inclure le component Cookie et paramétrer les variables du controller nécessaires pour écrire un cookie nommé “baker_id” pour le domaine “example.com” qui a besoin d’une connexion sécurisée, qui est disponible au chemin “/bakers/preferences/”, qui expire dans une heure, et est uniquement en HTTP.
public $components = array('Cookie');
public function beforeFilter() {
parent::beforeFilter();
$this->Cookie->name = 'baker_id';
$this->Cookie->time = 3600; // ou '1 hour'
$this->Cookie->path = '/bakers/preferences/';
$this->Cookie->domain = 'example.com';
$this->Cookie->secure = true; // ex. seulement envoyé si on utilise un HTTPS sécurisé
$this->Cookie->key = 'qSI232qs*&sXOw!adre@34SAv!@*(XSL#$%)asGb$@11~_+!@#HKis~#^';
$this->Cookie->httpOnly = true;
$this->Cookie->type('aes');
}
Ensuite, regardons comment utiliser les différentes méthodes du Component Cookie.
Le Component Cookie offre plusieurs méthodes pour travailler avec les Cookies.
La méthode write() est le cœur du composant Cookie, $key est le nom de la variable désirée, et $value est l’information à stocker:
$this->Cookie->write('nom', 'Rémy');
Vous pouvez également grouper vos variables en utilisant la notation point “.” dans les paramètres de clé:
$this->Cookie->write('User.name', 'Larry');
$this->Cookie->write('User.role', 'Lead');
Si vous voulez écrire plus d’une valeur dans le cookie en une fois, vous pouvez passer un tableau:
$this->Cookie->write('User',
array('name' => 'Larry', 'role' => 'Lead')
);
Toutes les valeurs dans le cookie sont chiffrées par défaut. Si vous voulez stocker vos valeurs en texte clair, définissez le troisième paramètre de la méthode write() à false. Vous devriez vous rappeler de définir le mode de chiffrement à “aes” pour vous assurer que les valeurs sont chiffrées de façon sécurisée:
$this->Cookie->write('name', 'Larry', false);
Le dernier paramètre à écrire est $expires - le nombre de secondes avant que le cookie n’expire. Par convention, ce paramètre peut aussi être passé comme une chaîne de caractères que la fonction strtotime() de PHP comprend:
// Les deux cookies expirent dans une heure.
$this->Cookie->write('first_name', 'Larry', false, 3600);
$this->Cookie->write('last_name', 'Masters', false, '1 hour');
Cette méthode est utilisée pour lire la valeur d’une variable de cookie avec le nom spécifié dans $key.
// Sortie "Larry"
echo $this->Cookie->read('name');
// Vous pouvez aussi utiliser la notation par point pour lire
echo $this->Cookie->read('User.name');
// Pour prendre les variables que vous aviez groupées en utilisant
// la notation par point comme tableau, faites quelque chose comme
$this->Cookie->read('User');
// ceci retourne quelque chose comme array('name' => 'Larry', 'role' => 'Lead')
$key (string
) – La clé à vérifier.
Utilisé pour vérifier si une clé/chemin existe et a une valeur non null.
Nouveau dans la version 2.3: CookieComponent::check()
a été ajoutée dans la version 2.3
Efface une variable de cookie dont le nom est défini dans $key. Fonctionne avec la notation par point:
// Efface une variable
$this->Cookie->delete('bar');
// Efface la variable bar du cookie, mais seulement dans foo.
$this->Cookie->delete('foo.bar');
Détruit le cookie actuel.
Vous permet de changer le schéma de chiffrement. Par défaut, le schéma “cipher” est utilisé pour une compatibilité rétroactive. Cependant, vous devriez toujours utiliser les schémas “rijndael” ou “aes”.
Modifié dans la version 2.2: Le type “rijndael” a été ajouté.
Nouveau dans la version 2.5: Le type “aes” a été ajouté.