H2 - P2019

Développement web

Cours 25 - 2016-03-14

PHP

Cookies et Sessions

Cookies

  • Donnée créée par le serveur, mais stockée chez le visiteur
  • Peut être modifié par ce serveur en PHP
  • Peut être modifié par le visiteur
  • Associé au domaine
  • Il est impossible de lire les cookies d'un autre domaine
  • Les cookies sont envoyées au serveur à chaque requête

La méthode setcookie() permet de créer/modifier ces cookies


setcookie('name', 'value', time() + 1000, '/');
                    
  • Nom du cookie (String)
  • Valeur du cookie (String)
  • Date d'expiration (Int)
    Exprimé en timestamp unix
    Ne pas confondre avec sa durée de vie
  • Chemin où le cookie existe (String)
    / veut dire qu'il sera disponible partout

Récupération

Lorsque le visiteur va accéder à une nouvelle page, il sera possible de récupérer ses cookies dans la variable $_COOKIE

Il s'agit d'un tableau associatif


echo '
';
print_r($_COOKIE);
echo '
'; die($_COOKIE['mon_cookie']);

Erreur

Ne fonctionne pas si du HTML a été renvoyé


echo 'test';
setcookie('mon_cookie','ma_valeur');

                    

Modifier par le visiteur

Puisque ces données se trouvent chez le visiteur, il peut les modifier facilement.

https://chrome.google.com - Edit This Cookie (plugin chrome)

Durée de vie

Par défaut, le cookie sera supprimé à la fermeture du navigateur

Il est possible de spécifier une date d'expiration en timestamp unix

La fonction time() permet de récupérer le timestamp unix actuel


setcookie('mon_cookie','ma_valeur',time() + 60 * 60); // Le cookie expirera dans 1h
                    

Supprimer

Il suffit de spécifier une date d'expiration antérieur

Le cookie ne sera réellement supprimé qu'après avoir actualisé la page


setcookie('mon_cookie','',time() -10); // La date d'expiration est antérieur, le cookie sera supprimé
                    

Exemples d'utilisation

  • Savoir si un visiteur est déjà venu sur le site
  • Le suivre durant sa navigation
  • Enregistrer ses préférences
  • Empêcher l'utilisateur d'accomplir plusieurs fois une action (voter, jouer, ...)
  • Avoir un panier d'achat alors que l'on n'a pas encore créé de compte
  • ...

À savoir

  • Certains utilisateurs désactivent les cookies
  • Cookie Law : Dans plusieurs pays, il est nécessaire de demander l'autorisation au visiteur pour sauvegarder des cookies
  • Comme les cookies sont envoyés avec chaque requête, ces dernières peuvent être ralenties
  • Les cookies peuvent être édités en JS

Sessions

  • Utilisation similaire aux cookies, mais donnée stockée côté serveur
  • L'utilisateur ne peut pas les modifier
  • Va tout de même stocker un cookie appelé session_id permettant de faire le lien avec le visiteur
  • S'utilise comme les cookies
  • Permet de stocker plus que des chaînes de caractères

Pour pouvoir utiliser les sessions, il faut appeler la fonction session_start (avant d'envoyer le moindre code HTML)


session_start();
$_SESSION['login']    = 'login_visiteur';
$_SESSION['language'] = 'fr';
$_SESSION['role']     = 'admin';
                    

Pour terminer une session, il faut appeler la fonction session_destroy (avant d'envoyer le moindre code HTML)


session_destroy();
                    

Idéal pour stocker des données sensibles ne pouvant figurer sur l'ordinateur du visiteur

Demande plus de ressources côté serveur