Utiliser des données semi-permanente

Les cookies

Les cookies c'est quoi ?
Un cookie possède un nom, une valeur et une date d'expiration. Il est également lié à un nom de domaine.
Ils servent à stocker des données semi-persistantes, càd qui seront amenées à disparaître, mais qui ne disparaissent pas à la fin de la requête HTTP.
Les cookies sont des données stockées coté client par le serveur et envoyées au serveur avec chaque requête.
À quoi ça sert ?
Ils servent à stocker des données qui ne sont pas dangereuses. Par exemple un panier utilisateur, ou une confirmation d'age.
Les cookies servent à stocker des données non critiques que l'on souhaite transmettre systématiquement entre les pages.
Créer un cookie
Pour faire cela, PHP dispose d'une fonction, setcookie.
Pour créer un cookie, il faut que le serveur envoie au client un header HTTP Set-Cookie dans sa réponse.

Important : Comme cette fonction doit émettre un header HTTP, elle doit être appelée avant tout affichage !
Exemple
On va créer un cookie age qui stockera l'age de l'utilisateur. Pour 1 jour.
<?php
$age = true;
setcookie("age", $age, time() + 60 * 60 * 24); // expire in 24 hoursAnalyse de setcookie

Name
Le nom du cookie, il doit être unique.
Value
La valeur du cookie.
Expire
La date à partir de laquelle le cookie expirera. Il s'agit d'un timestamp UNIX, càd un nombre de seconde depuis le premier janvier 1970.
Path
La chemin pour lequel le cookie sera valide, par défaut "/". Si le chemin est "/dossier", le cookie sera transmis pour http://example.fr/dossier, mais aussi http://example.fr/dossier/sousdossier, mais pas pour http://example.fr/.
Secure
Si vrai, le cookie ne sera envoyé que si la connexion est faite en HTTPS.
Httponly
Si vrai, le cookie ne sera pas accessible depuis JavaScript.
Accéder à des cookies
Une fois que nous avons défini un cookie, nous pouvons y accéder via la super-globale $_COOKIES.
La variable contient un tableau au format ['nom_cookie' => value].
<?php
echo 'Vous avez ' . $_COOKIES['age'] . ' ans.';Exemple, pour afficher le contenu du cookie "age".
Supprimer un cookie
Parfois, on souhaite supprimer un cookie. Cependant, il n'existe pas réellement de fonction pour ça.
À la place, on va redéfinir le cookie en mettant une date d'expiration déjà dépassée.
<?php
// set the expiration date to one hour ago
setcookie('cart', '', time() - 3600);Exemple, pour supprimer le cookie "cart".
Les limites des cookies
Les cookies ont de nombreuses limites :
1 - Ils sont stockés coté utilisateur, et peuvent donc être lus et manipulés. Il ne faut donc pas stocker de données sensibles, ni croire les données issues des cookies.
2 - Les données transites sur le réseau. Elles peuvent donc être interceptées. Et elles utilisent de la bande passante.
3 - Ils peuvent êtres désactivés par les utilisateurs.
Les sessions

Les sessions c'est quoi ?
Comme un cookie, une session possède un nom, une valeur et une date d'expiration.
Elles servent à stocker des données semi-persistantes, càd qui seront amenées à disparaître, mais qui ne disparaissent pas à la fin de la requête HTTP.
Les sessions sont des données stockées sur le serveur et rattachées à un identifiant, unique, qui est transmis au client.
À quoi ça sert ?
Typiquement, les sessions sont utilisées pour sauvegarder des identifiants de connexion, mais aussi pour des données moins critiques, comme le panier de l'utilisateur.
Les sessions servent à stocker des données critiques que l'on souhaite transmettre systématiquement entre les pages.
Comment ça fonctionne ?




1. Le client demande une page au serveur.
2. Le serveur tire un identifiant unique et créer un fichier correspondant à cet identifiant et contenant les données à stocker dans la session.
3. Le serveur renvoi au client un cookie qui contient cet identifiant unique.

4. Le client envoie une autre requête au serveur en lui fournissant le cookie.
5. Le serveur analyse ce cookie et va lire le fichier de session associé. Il a donc accès aux données de session.
Si jamais les cookies ne sont pas utilisables, PHP peut être réglé pour utiliser une variable GET à la place.
Créer une session
Pour faire cela, PHP dispose de deux fonctions, session_name et session_start.
Pour créer une session, on va tirer un identifiant unique, créer un cookie, et créer un fichier.
Important : Comme cette fonction doit émettre un cookie, elle doit être appelée avant tout affichage !


session_name & session_start
Permet de démarrer la session, on ne touchera pas aux options. Doit être appelé sur chaque page où on veut utiliser les variables de session.


Permet de définir le nom de la session. Pas obligatoire, mais recommandé. Dois être appelé avant session_start.
Accéder à une session
Pour accéder à une session, il faut d'abord avoir démarré session_start. Ensuite, il suffit d'y accéder via la super-globale $_SESSION.
<?php
session_name('some_name');
session_start();
echo 'Vous avez ' . $_SESSION['age'] . ' ans.';Exemple, pour afficher le contenu de la variable de session "age".
Exemple
On va créer une page qui affiche le nombre de fois ou un utilisateur a visité la page.
<?php
session_name('b2_count_visit_example');
session_start();
$_SESSION['count_visit'] = $_SESSION['count_visit'] ?? 0;
$_SESSION['count_visit'] ++;
echo 'Vous avez déjà visité cette page ' . $_SESSION['count_visit'] . ' fois.';Supprimer une session
Il peut être nécessaire de supprimer une session, principalement pour des raisons de sécurité, notamment quand un utilisateur se déconnecte.
<?php
session_name('some_name');
session_start();
session_destroy();Pour cela, il existe la fonction session_destroy.
Cette fonction va supprimer les données actuelles de la session (elles seront encore disponible dans $_SESSION pour la page en cours).
Les limites des sessions
Les sessions n'ont qu'une seule limite, c'est qu'elles disparaissent quand l'utilisateur ferme son navigateur.
Contrairement au cookies, les données sont stockées sur le serveur, et elles ne sont donc pas visible pour l'utilisateur, ce qui permet de manipuler des données critiques.
Par défaut, une session expire au bout d'un certain temps d'inactivité, ce temps est réglable via les paramètres de PHP, mais une gestion fiable est plus complexe.
Fin
Utiliser des données semi-permanentes
By plebweb
Utiliser des données semi-permanentes
- 549