Les sessions PHP
Quelques exemples
1 - Création d'un espage membre
Voilà une des principales applications des sessions, permettre à un utilisateur d'accéder à un espace restreint après s'être identifié. Pour cet exemple, on considera que la variable $is_identified vaut 1 si le membre s'est correctement identifié via un formulaire.
Au moment de l'identification :
<?php
session_start();
if ( $is_identified ) {
$member = 1;
session_register('member');
}
else {
/* Affichage du formulaire d'identification */
}
?>
Et pour l'accès aux fonctions de l'espace membre :
<?php
session_start();
if ($member == 1) {
/* Accès aux fonctions de l'espace membre */
}
else {
echo 'Il faut être identifié pour accéder à cette section';
}
?>
2 - Compteur de visiteurs online
Vous avez sûrement pu le voir, sur de nombreux sites (comme PHPTools4U), on peut voir le nombre de visiteurs en ligne sur le site. Alors info ou intox ?
En fait, il ne s'agit pas de sessions très précises. Le protocole HTTP étant ce qu'il est, il est impossible de déterminer si un utiliseur est sur un site ou pas. Pour ce faire, on part du principe qu'un visiteur est encore en ligne X minutes après son dernier rafraichissement de page.
Ainsi donc, nous allons compter le nombre de sessions "actives". C'est à partir de là qu'il faut ruser
En PHP, on ne peut pas déterminer le nombre de sessions via une fonction, mais il est possible de déterminer le nombre de fichiers de sessions
Il suffit juste de savoir si un fichier de session est encore valide selon nos critères, c'est à dire, si la date de dernière modification de session (raff de page) est inférieure à un certain temps.
Sur toutes vos pages, il suffit de :
<?php
session_start();
?>
la fonction du compteur :
<?php
if ( $d = opendir( session_save_path() ) ) {
$count = 0;
$session_timeout = 3 * 60;
while ( false !== ( $file = readdir( $d ) ) ) {
if ( $file != '.' && $file != '..' ) {
if ( time()- fileatime(session_save_path() . '/' . $file) < $session_timeout ) {
$count++;
}
}
}
}
echo $count;
?>
Dans cet exemple, $session_timeout correspond à la durée en secondes pendant laquelle une session est considérée comme active. $count contient le nombre de sessions actives.
Conclusion
Les sessions PHP sont d'une très grande richesse pour des sites "interactifs". Elles substituent très bien les pseudos-sessions que l'on peut créer avec une base de données, mais ont en plus l'avantage d'être moins gourmandes en ressources système.
Il ne reste plus qu'à vous faire la main avec ce nouvel outil !