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.

Déposez gratuitement votre projet sur Codeur.com, recevez une quinzaine de devis et sélectionnez le développeur web idéal.

Trouver un développeur web

Qu’est-ce qu’un cookie ?

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 avec PHP

Créer un cookie en PHP est très simple. Il suffit d’utiliser la fonction setcookie. Cette fonction accepte plusieurs paramètres :

  • $name, le nom du cookie. Essayez d’utiliser un nom compréhensible, simple et facile à écrire en code. Exemples : « userId », « gdprConscented ».
  • $value, la valeur du cookie. Il est important de ne pas stocker de données sensibles, comme les mots de passe.
  • $expires_or_options, la durée du cookie. Mais c’est un particulier, nous en parlerons juste après.
  • $path (facultatif), le chemin d’url sur lequel ce cookie sera accessible. Par défaut, avec la valeur « / », le cookie est accessible sur l’intégralité du site.
  • $domain (facultatif), le domaine ou le sous-domaine pour lequel le cookie est accessible.
  • $secure (facultatif), sécurise le cookie. Si la valeur est à « true », alors le cookie ne sera accessible que dans le cadre d’une connexion https.
  • $httponly (facultatif), à l’inverse de $secure, si la valeur est à « true », le cookie ne sera accessible que dans une connexion http.
  • $options (facluatif), un tableau de données avancées.

Gérer la durée de vie d’un cookie

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 );
?>

 

Modifier un cookie

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 :

  • Mettre à jour sa valeur,
  • Le prolonger.

 

Supprimer un cookie

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 );
?>

 

Récupérer la valeur d’un cookie

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.

 

Utiliser les cookies pour connecter un utilisateur

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 :

  • Fonction 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);
  • Dans la fonction isLogged, remplacer les 4 $_SESSION par $_COOKIE.
  • Remplacer la fonction logout pour
    function logout() {
      setcookie('user_email', null, time()-3600 );
      setcookie('user_token', null, time()-3600 );
    }

 

Notre astuce pour créer et gérer les cookies en PHP

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.