Les sessions sont un moyen simple de stocker des donnĂ©es individuelles pour chaque utilisateur en utilisant un identifiant de session unique. Elles peuvent ĂȘtre utilisĂ©es pour faire persister des informations entre plusieurs pages. Les identifiants de session sont normalement envoyĂ©s au navigateur via des cookies de session, et l'identifiant est utilisĂ© pour rĂ©cupĂ©rer les donnĂ©es existantes de la session. L'absence d'un identifiant ou d'un cookie de session indique Ă PHP de crĂ©er une nouvelle session, et gĂ©nĂšre ainsi un nouvel identifiant de session.
Les sessions suivent une cinĂ©matique simple. Lorsqu'une session est dĂ©marrĂ©e, PHP va soit rĂ©cupĂ©rer une session existante en utilisant l'identifiant de session passĂ© (habituellement depuis un cookie de session) ou si aucun identifiant de session n'est passĂ©, il va crĂ©er une nouvelle session. PHP va ainsi peupler la variable superglobale $_SESSION avec toutes les donnĂ©es de session une fois la session dĂ©marrĂ©e. Lorsque PHP s'arrĂȘte, il va prendre automatiquement le contenu de la variable superglobale $_SESSION, le sĂ©rialiser, et l'envoyer pour stockage au gestionnaire de sauvegarde de session.
Par défaut, PHP utilise en interne le gestionnaire de sauvegarde files
qui est défini via la directive session.save_handler.
Les données de session seront sauvegardées sur le serveur à l'endroit spécifié par
la directive de configuration session.save_path.
Les sessions peuvent ĂȘtre dĂ©marrĂ©es manuellement en utilisant la fonction
session_start(). Si la directive de configuration
session.auto_start est dĂ©finie Ă
1, une session démarrera automatiquement lors du début
de la demande.
Les sessions s'arrĂȘtent automatiquement lorsque PHP a terminĂ© d'exĂ©cuter un script, mais peuvent ĂȘtre stoppĂ©es manuellement en utilisant la fonction session_write_close().
Exemple #1 Enregistrer une variable avec $_SESSION.
<?php
session_start();
if (!isset($_SESSION['count'])) {
$_SESSION['count'] = 0;
} else {
$_SESSION['count']++;
}
?>Exemple #2 Retirer une variable de session avec la superglobale $_SESSION.
<?php
session_start();
unset($_SESSION['count']);
?>
N'utiliser PAS la fonction unset()
avec $_SESSION sous la forme
unset($_SESSION) sinon, cela rendra impossible
l'enregistrement de données dans la session en utilisant la super-globale
$_SESSION.
Il n'est pas possible d'utiliser les références sur des variables de session car il n'y a aucune maniÚre faisable de restaurer une référence vers une autre variable.
Note:
Les sessions basĂ©es sur un fichier (par dĂ©faut en PHP) verrouillent le fichier de session lorsqu'une session est ouverte via la fonction session_start() ou implicitement via la directive de configuration session.auto_start. Une fois verrouillĂ©e, aucun autre script ne peut accĂ©der au mĂȘme fichier de session tant que la session n'a pas Ă©tĂ© fermĂ©e par le script l'ayant ouverte, ou tant que la fonction session_write_close() n'a pas Ă©tĂ© appelĂ©e.
Ceci peut ĂȘtre gĂȘnant pour les sites web utilisant AJAX et produisant plusieurs requĂȘtes concurrentes. La façon la plus simple pour contourner ce problĂšme est d'appeler la fonction session_write_close() dĂšs lors que les modifications dans la session ont Ă©tĂ© effectuĂ©es, de prĂ©fĂ©rence en dĂ©but de script. Il est possible d'aussi utiliser un autre gestionnaire de session qui supporte la concurrence.