Manuel PHP

Précédent

 

Suivant

XLIX. Gestion des sessions

La gestion des sessions avec PHP est un moyen de sauver des informations entre deux accès. Cela permet notamment de construire des applications personnalisées, et díaccroître líattrait de votre site.

Chaque visiteur qui accède à votre site se voit assigné un numéro díidentifiant, appelé plus loin " identifiant de session ". Celui ci est enregistré soit dans un cookie, chez le client, soit dans líURL.

Les sessions vous permettront díenregistrer des variables, pour les préserver et les réutiliser tout au long des requêtes. Lorsquíun visiteur accède à votre site, PHP vérifiera automatiquement (Si session.auto_start est à 1) ou manuellement (explicitement avec session_start() ou implicitement avec session_register()) si une session a déjà été ouverte. Si une telle session existe déjà, líenvironnement précédent sera recréé.

Toutes les variables enregistrées seront enregistrées sur le disque à la fin de chaque requête. Les variables enregistrées mais non définies seront marquées comme tel. Lors des accès ultérieurs, elle ne seront définies que si líutilisateur le fait.

Il y a deux mode de propagation de líidentifiant de session :

  • Cookies
  • URL

Le module de session supporte les deux techniques. La méthode par cookies est optimale, mais étant donné le peut de fiabilité (les clients peuvent les refuser, ou les effacer), on ne peut pas se contenter de cette technique. La deuxième méthode place líidentifiant de session directement dans líURL.

PHP est capable de gérer ceci de manière transparente, lorsque vous le compilez avec líoption --enable-trans-sid. Dans ce cas, les URL relatives seront modifiées pour contenir líidentifiant de session automatiquement. Sinon, vous pouvez toujours utiliser la constante SID, qui sera définie si le client níenvoie pas le cookie approprié. SID prend la forme de session_nom=session_id ou cíest une chaîne vide.

Líexemple suivant montre comment enregistrer une variable, et comment relier correctement des pages avec SID.

Exemple 1. Compter le nombre de hit díun utilisateur.

<?php

session_register("compteur");

$compteur++;

?>

Salut visiteur, vous avez vu cette page <? echo $compteur; ?> fois.<p>

<?
# le <?=SID?> est nécessaire pour transmettre líidentifiant de session 
# au cas ou les utilisateurs auront inactivé les cookies
?>

 Pour continuer, , <A HREF="nextpage.php?<?=SID?>">clique ici </A>

Pour enregistrer ces informations dans une base de données, il vous faut utiliser la fonction session_set_save_handler(). Il faudra alors implémenter la fonction suivante pour líadapter à MySQL ou toute autre base de données :

Exemple 2. Utilisation de session_set_save_handler()

<?php

function open ($save_path, $session_name) {
    echo "open ($save_path, $session_name)\n";
    return true;
}

function close () {
    echo "close\n";
    return true;
}

function read ($key) {
    echo "write ($key, $val)\n";
    return "foo|i:1;";
}

function write ($key, $val) {
    echo "write ($key, $val)\n";
    return true;
}

function destroy ($key)
    return true;
}

function gc ($maxlifetime) {
    return true;
}

session_set_save_handler ("open", "close", "read", "write", "destroy", "gc");

session_start ();

$foo++;

?>
     

Cela va produire le résultat suivant :

$ ./php save_handler.php
Content-Type: text/html
Set-cookie: PHPSESSID=f08b925af0ecb52bdd2de97d95cdbe6b

open (/tmp, PHPSESSID)
read (f08b925af0ecb52bdd2de97d95cdbe6b)
write (f08b925af0ecb52bdd2de97d95cdbe6b, foo|i:2;)
close
    

Le <?=SID?> níest pas nécessaire, si líoption --enable-trans-sid a été utilisé pour compiler PHP.

Le système de gestion des session dispose díun grand nombre díoptions, qui sont placéesdans le fichier php.ini file. En voici un survol rapide :

  • session.save_handler défini les noms des fonctions qui seront utilisées pour enregistrer et retrouver les données associées à une sessions. Par défaut, les sessions sont enregistrées dans des fichiers.
  • session.save_path défini les arguments qui seront passé à la fonction de sauvegarde. Par défaut, líargument à passer est le chemin jusquíau dossier de sauvgarde (/tmp).
  • session.name spécifie le nom de la session, qui sera utilisé comme nom de cookie. Par défaut : PHPSESSID.
  • session.auto_start indique quíune session doit commencer automatiquement lors de la premier requête. Par défaut à 0 (inactivé).
  • session.lifetime fixe la durée de vie en second du cookie envoyé au client. La valeur 0 signifie "jusquíà ce que le client soit fermé.". Par défaut à 0 (inactivé).
  • session.serialize_handler défini le nom de la fonction qui sera utilisé pour enregistrer et relire les donnés.Actuellement, cíest un format interne de PHP (nom : php) et WDDX (nom : wddx). sont supportés. WDDX níest utilisable que si PHP a été compilé avec le support WDDX support. Par défaut, php.
  • session.gc_probability précise la probabilité que la routine gc (garbage collection) soit lancé, en pourcentage. Par défaut, 1.
  • session.gc_maxlifetime fixe la durée, en seconde, audela de laquelle les données seront considérées comme inutile, et supprimées.
  • session.extern_referer_check détermine si líidentifiant de session ids utilisé par des sites externe seront éliminé. Si les identifiants de sessions sont propagés avec la méthode des URL, des utilisateurs qui níen connaîtrait pas líutilité risque de divulguer ces valeurs, et cela ménera à des problèmes de sécurité. Cette option y remédie. Par défaut : 0.
  • session.entropy_file est le chemin jusquíà une source externe (fichier) díentropie, qui sera utilisée lors de la création de líidentifiant de session. Par exemple, /dev/random ou /dev/urandom qui sont disponibles sur de nombreux systèmes UNIX.
  • session.entropy_length précise le nombre díoctets qui seront lu dans le fichier ci dessus. Par défaut, 0 (inactivé).
  • session.use_cookies indique si le module doit utiliser des cookies pour enregistrer líidentifiant de session chez le client. Par défaut, 1 (activé).

Note: La gestion des sessions a été ajoutée dans PHP 4.0.

Table des matières
session_start _ Initialise les données de session
session_destroy _ Détruit toutes les données enregistrées, pour la session courante.
session_name _ Affecte et/ou retourne le nom de la session courante.
session_module_name _ Affecte et/ou retourne le module de la session courante.
session_save_path _ Affecte et/ou retourne le chemin de sauvegarde de la session courante.
session_id _ Affecte et/ou retourne líidentifiant de session courante.
session_register _ Enregistre une variable dans la session courante.
session_unregister _ Supprime une variable dans la session courante
session_is_registered _ Indique si une variable a été enregistrée dans la session ou pas.
session_decode _ Décode les données de session à partir díune chaîne.
session_encode _ Encode les données de session dans une chaîne

Précédent

Sommaire

Suivant

shm-remove-var

Chapitre

msql_affected_rows