02
Déc
2002

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 :D
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 opendirsession_save_path()  )  ) {
        
$count 0;
        
$session_timeout 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 !

Posté par Mathieu LESNIAK à 13:15 dans la catégorie Articles | RSS catégorie
Tag(s) associé(s) :
Partager cet article : Ajouter en favori sur KreuZZPoster cet article sur ScoopeoPoster cet article sur FuzzPoster cet article sur diggAjouter en favori sur Del.icio.usPoster cet article sur reddit
Grek
02/11/02 19:29:02

Super article ! Des articles de cette qualité manquent sur le net... S'il était encore un peu plus détaillé je dois dire que ça arrangerais les débutants comme moi. Au fait, pourriez-vous mettre votre script d'espace membre en complement de l'article ? Ce serait super cool... Je vais maintenant essayer de mettre en pratique le contenu de ce super article BbByYyEeE

ostead
07/11/02 10:12:28

Je trouve l'article super cool, quoi qu'un peu rapide comme le diqait au dessus de moi Grek, en tout cas pour un débutant comme moi. Je vous remercie tout de même car il m'est d'une aide précieuse!! @+

Ostead

Izno
03/06/03 15:05:04

No comment, le cours est niquel, les exemples simple et concret. Pas de temps perdu dans l'inutile ou l'incomprehensible. Bravo...

ps: dommage que le pdf est quelques loupés de mise page.(supportable)

leon
03/11/03 10:49:17

merci pour l'article, je pense que la réponse à mon problème actuel est dans

... Le code ci-dessus ne marchera pas, alors que celui ci-dessous fonctionnera : <?php function test_session() { $GLOBALS['variable'] = '1234'; session_register('variable'); } ... mes variables passaient bien avec le easyphp 1.6 installé mais plus avec la version 1.7 comme le disait Boris Vian : y'a quelque chose qui cloche la dedant, j'y retourne immediatement...

bien à vous leon

jeanmisericorde
04/11/03 10:58:37

Bonjour, excellent article en effet ! Si bien concu que je voudrai vous soumettre mon code, pourtant calqué sur ce cours.

voici comment je crée une session : session_start(); $id_ok = $row_ident['id']; $pseudo_ok = $row_ident['pseudo']; $secret_ok = $row_ident['secret']; $nom_ok = $row_ident['nom']; $prenom_ok = $row_ident['prenom']; session_register("id_ok"); session_register("pseudo_ok"); session_register("secret_ok"); session_register("nom_ok"); session_register("prenom_ok"); header("Location: ../index_membre.php?".session_name()."=".session_id()); exit;

et voici comment j'accède aux variables : echo $_SESSION["prenom_ok"]." ".$_SESSION["nom_ok"];

Probleme : ce dernier code n'affiche rien ! merci de me débloquer

black_stitch
01/03/04 11:58:40

j'ai exactement la meme couille que jeanmisericorde, a savoir que j'arrive a enregistrer ma variable session dans une page, mais une fois ma page redirigée je perd ma varaible session... et je m'arrache le cerveau a essayer de trouver d'ou ca peu bien venir, donc si qqubn a la soluce ca m'aiderai trop ! Merci

black_stitch
01/03/04 12:20:16

Pour rectification, je crois qu'il enregistre quedal, je vous met mon code, si vous voyez une merde ... <?PHP session_start();

include "../page/connection.php"; //récupération des identifiants de la connection envoyés par la feuille de connection if (isset($_GET['login'])) $login=$_GET['login']; if (isset($_POST['login'])) $login=$_POST['login'];

if (isset($_POST['pass'])) $pass=$_POST['pass']; if (isset($_GET['pass'])) $pass=$_GET['pass']; //codage du mot de pass $password=md5($pass);

//selection des identifiants dans la base $requeteSelectIdent="select * from utilisateur where login='$login' and pass='$password'"; //execution de la requete $requeteExec=mysql_query($requeteSelectIdent); //identification de l'entrant $result=mysql_fetch_array($requeteExec); //si la requete renvoie qqchose if ($result[0]) { //récupération du login $_SESSION['login']=$login; //récupération du mot de pass $_SESSION['pass']=$pass; //enregistrement des variables sessions session_register('login', 'pass'); header("location:../index.php"); }

(j'ai rajouté des commentaires pour ceux que ca interesses) :) Merci

Kevbrok
13/03/04 01:54:25

Dans le code pour savoir qu est en ligne, sois:

<?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; ?>

D'ou vient la variable $d ?? :S

OuPinaise
07/05/04 10:41:49

Pareil que Leon pour le GLOBALS !!!

je crois que mon script ne marchait pas à cause de ça. Thx a lot dude !

sunshine
sunshine
25/08/04 02:35:31

coucou tout le monde, vous allez peut-être me trouver rabas-joie, mais je n'arrive pas, mais alors pas du tout à faire fonctionner les sessions. je ne sais absolument pas comment me débrouiller pour les faire marcher... le truc c'est que je pensais pouvoir les utiliser dans le cas suivant: un utilisateur se log, et ça ouvre une session..! le problême c'est que je ne sais pas du tout comment faire. le formulaire est là, tout est là, seulement, au moment où il s'agit des sessions, y a plus rien ! merci de m'éclairer, j'ai hâte d'arriver à faire tout ça :)

michel
michel
18/09/06 16:28:13

hello tout le monde, c'est super ce petit tuot sur les sessions!!un grand merci

fu
20/09/06 17:34:42

help

hamaz
hamaz
11/04/07 14:11:09

concevoir 1 site web pour la vente en ligne ça demande dy ajouter le script des session ;et moi jy connai rien en ça pour le moment .alors 1 peut d'eclairage et merci.

sou
sou
10/05/07 19:51:34

c'est génial

tafa
tafa
25/05/07 23:22:57

Je voudrais insérer une variable globale dans un champs d'une table mysql.Le champs est dans un un formulaire qui existe sur une autre page que la page principale. je voudrais que vous m'aidiez si vous avez une idée. Merci

tafa
tafa
25/05/07 23:25:54

Je voudrais insérer une variable globale dans un champs d'une table mysql.Le champs est dans un un formulaire qui existe sur une autre page que la page principale. je voudrais que vous m'aidiez si vous avez une idée. Merci

sly
sly
05/09/07 13:11:15

il manque un session_write_close() en fin de script pour que les données soient effectivement stockées...

rachid
08/09/07 12:21:36

salut

tibob123
22/09/07 15:02:33

VIVe site du zero :P

hichem
23/01/08 22:39:39

bien

Les commentaires ne sont pas autorisés pour ce billet