La semaine dernière nous avons vu comment Ouvrir et fermer une session sécurisée en PHP. Pour ce tuto nous allons rester dans le même thème avec la sauvegarde des données utilisateurs, mais cette fois sur une plus longue durée. En effet, nous allons apprendre à créer et à gérer les cookies grâce à PHP.
Sommaire :
Les variables de sessions ne sont disponibles seulement le temps de visite de l’utilisateur. Elles sont normalement supprimées par le navigateur quand ce dernier est fermé. Mais cela dépend des configurations de l’utilisateur. En temps que développeur, nous n’avons aucun pouvoir sur la durée de vie des variables.
Les cookies, quant à eux, sont toujours des variables, mais enregistrées pour une durée déterminée, définie par le développeur. Elles sont donc plus appréciées pour la gestion des comptes utilisateurs, afin de ne pas avoir besoin de se connecter au site internet à chaque visite.
Enfin, il faut savoir que les cookies sont stockés sur l’ordinateur de l’utilisateur et non pas sur le serveur du site internet. Les navigateurs ont une petite base de données interne et cachée où sont stockées les informations de navigation comme l’historique, les saisies de formulaires, les mots de passe, les sessions et les cookies.
Créer un cookie en PHP est très simple. Il suffit d’utiliser la fonction setcookie. Cette fonction accepte plusieurs paramètres :
La durée de vie d’un cookie n’est pas seulement une histoire de temps à partir de maintenant. En réalité, on devrait plutôt dire « la date d’expiration du cookie ».
En effet, il faut indiquer la date d »expiration du cookie depuis l’heure Unix (ou « période Unix »).
Qu’est-ce que l’heure Unix ? Il s’agit tout simplement d’une date décidée par les développeurs de la première époque à partir de laquelle les ordinateurs commencent à compter. Il s’agit du 1ᵉʳ janvier 1970. Étant donné qu’il n’y avait pas d’ordinateurs avant, c’est une méthode mise en place pour économiser la taille en octets des dates enregistrées. Quand un ordinateur calcul l’année 2022, c’est en réalité pour lui l’année 52 auquel il ajoute 1970 pour les humains.
Donc, si nous voulons que notre cookie soit valide 24h, nous allons devoir indiquer, en secondes, le temps passé entre l’heure Unix et maintenant auxquels on ajoute le nombre de secondes qui lui reste à vivre. C’est-à-dire le nombre de secondes entre le 1ᵉʳ janvier 1970 et dans 24 heures.
Pas de panique, c’est facile. Heureusement, il existe une fonction qui nous permet de connaître le nombre de secondes à l’instant t depuis l’heure Unix. Il s’agit de la fonction time. Il ne restera plus qu’à rajouter au résultat de la fonction time()
le temps que devra durer le cookie ; c’est-à-dire 60 secondes x 60 minutes x 24 heures
.
<?php
setcookie( 'test', "Ok", time() + 60 * 60 * 24 );
?>
Pour mettre à jour un cookie, rien de plus simple, il suffit de le recréer avec la fonction setcookie
. Même pas besoin de le supprimer avant. Il faut juste s’assurer que le nom du cookie soit bien le même.
On peut régénérer un cookie pour :
La meilleure méthode pour supprimer un cookie est le modifier en indiquant une date de péremption déjà passée. Comme par exemple, dire qu’il y a déjà périmé il y a une heure.
<?php
setcookie( 'test', null, time() - 3600 );
?>
Les cookies sont accessibles depuis la variable superglobale$_COOKIE
. Pour en savoir plus sur le sujet, vous pouvez pour référer au tutoriel sur le sujet : Variable globale PHP : à quoi ça sert ?.
La variable $_COOKIE
contient donc tous les cookies accessibles depuis la page que visite l’utilisateur. Il s’agit d’un tableau associatif. Donc, pour lire le cookie « test », on va faire :
<?php
echo $_SESSION['test']; // ==> Ok
?>
Si le cookie appelé n’existe pas, cela génèrera une erreur ou retournera null
selon le niveau de sensibilité aux erreurs de votre configuration PHP.
Reprenons le tuto Ouvrir et fermer une session sécurisée en PHP. Tout le fonctionnement d’une session utilisateur y est expliqué.
Vous pouvez donc reprendre le même tuto, en replaçant la gestion des sessions par de la gestion de cookies. Ainsi, vous n’avez qu’à modifier les choses suivantes :
login
: remplacer $_SESSION['user_email'] = $email;
$_SESSION['user_token'] = $token;
par
$cookieDuration = 60 * 60 * 24; // 24h
$cookieEndOfTime = time() + $cookieDuration;
setcookie('user_email', $email, $cookieEndOfTime);
setcookie('user_token', $token, $cookieEndOfTime);
isLogged
, remplacer les 4 $_SESSION
par $_COOKIE
.logout
pour function logout() {
setcookie('user_email', null, time()-3600 );
setcookie('user_token', null, time()-3600 );
}
Vous savez à présent comment créer, modifier, supprimer et les cookies avec PHP. Vous connaissez également leur fonctionnement et où ils sont stockés.
Si vous rencontrez des bugs liés aux cookies sur votre site internet, il peut savoir de plusieurs facteurs : le serveur, les configurations PHP, un bug dans le code, etc.
Pour trouver la source de vos ennuis et les corriger, nous vous recommandons de faire appel à un développeur PHP. Sur Codeur.com, vous pouvez déposer gratuitement une annonce pour recevoir très rapidement des devis de freelances spécialisés.