Principe
Les sessions sont une alternative aux cookies, permettant de pallier les problèmes rencontrés.
Les sessions sont conservées sur le serveur. PHP envoie au navigateur un identifiant de session qui le conserve dans un cookie.
La session est perdue après la fin de la navigation.
La session permet de conserver une quantité d'information non limitée tout en empêchant un accès local aux données stockées.
Exemples d'utilisation
- authentifier un utilisateur
- garder des informations tout au long de la navigation
- panier d'achat
- formulaire en plusieurs parties
- ...
Lecture et écriture
Pour utiliser une session, il faut faire un appel systématique dans chaque script faisant appel à la session à travers la méthode session_start
L'intéraction avec les données de la session s'effectue à travers le tableau associatif $_SESSION
Lecture
<?php session_start(); if(isset($_SESSION['valeur'])) { echo $_SESSION['valeur']; } ?>
Ecriture
<?php session_start(); $_SESSION['valeur'] = 'donnee'; ?>Fonctionnement
L'identifiant de session est la valeur stockée dans le cookie PHPSESSID.
La valeur de cet identifiant est aléatoire.
Les variables sont stockées dans le tableau $_SESSION[]
Par défaut, le serveur efface les fichiers inutilisés depuis une heure et demie.
Les fonctions suivantes permettent d'autres intéractions avec la sessions :
session_id
- Identifiant actuel / permetde changer l'identifiant.
session_name
- par défaut PHPSESSID.
session_save_path
- répertoire de stockage.
session_set_cookie_params
- paramètres du cookie.
Exemple
<?php session_save_path("/tmp"); session_start(); $_SESSION['cle'] = 'valeur'; ?>
<html> <head><title>Session</title></head> <body> <h1>Session</h1>
<?php if(isset($_SESSION['cle'])) { echo $_SESSION['cle'] . "<br>"; echo session_id() . "<br>"; echo "Stockage : " . session_save_path(); } ?>
</body> </html>Le résultat est visible dans l'exemple.
Suppression
La suppression d'une session s'effectue par l'appel à la fonction session_destroy
et la suppression du tableau $_SESSION
.
<?php session_start(); session_destroy(); unset($_SESSION); ?>
Configuration
Le comportement des sessions est modifiable à travers différents paramètres. Ces paramètres sont visibles dans les informations de configuration du serveur, au paragraphe session.
Initialisation
- session.name
- session.auto_start évite le session_start() mais empêche les modification de comportement dans les scripts
Stockage
- session.serialize_handler
- session.save_path
Cookie
- session.cookie_lifetime
- session.cookie_path
- session.cookie_domain
- session.cookie_secure
Expiration
- session.gc_probability tirage aléatoire entre 0 et 99
- session.gc_maxlifetime
Cache
- session.cache_limiter
- public
- Les proxies et les navigateurs peuvent resservir à tous les utilisateurs
- private_no_expire
- utilisateur seulement, pas d'appel au serveur
- private
- utilisateur seulement, pas d'appel au serveur, expire
- nocache
- valeur par défaut pour les sessions; seule sauvegarde : backtrack
- none
- aucune sauvegarde
- session.cache_expire (pour private ou public)
Limitations et sécurité
Les sessions sont stockées sur le serveur, non chiffrées.
Il faut éviter la transmission des informations par URL.
Les identifiants par défaut suffisent.
Eviter les informations sensibles.