02
Déc
2002

Les sessions PHP

Combien d'entre vous se sont déjà demandés comment passer des infos pour un visiteur donné de page en page ? Et qui plus est, de manière sécurisée ? Vous pouvez avouer, si jamais vous avez décidé un jour de mettre en place un espace membre avec des fonctionnalités avancées, il est nécessaire d'identifier ce dit membre...

PHP (dans les versions >= 4) possède un mécanisme automatique et très pratique pour réaliser ceci : les sessions.
A noter cependant que si vous êtes encore en PHP3, vous pouvez utiliser la PHPLib Nous allons voir dans cet article comment manipuler les sessions avec quelques exemples d'applications.

Au programme :

  • Les sessions, c'est quoi ?
  • Comment manipule-t-on une session ?
  • Quelques exemples et conclusion

Les sessions, c'est quoi ?

1 - Qu'est-ce qu'une session ?

Une session est un mécanisme assez simple géré de manière transparente par le PHP. A chaque fois qu'une session est démarrée (3 méthodes sont possibles, comme nous le verront plus tard), un identifiant unique est attribué au visiteur. Cet identifiant permettra de le distinguer autres utilisateurs tout au long de sa session. Pendant la session, on pourra à loisir définir des variables qui "suivront le visiteur".
A chaque chargement de page, ces variables seront sauvegardées sous forme sérialisée dans un fichier texte portant le nom de la session.
(Ces fichiers sont, en général stockés dans /tmp sur un système unix)

L'identifiant unique de session peut se transmettre de 2 façons :

- cookie :
Un cookie est posé au debut de session et contient la variable PHPSESSID faisant référence à l'identifiant de session.
- URL : Le paramètre de session PHPSESSID ou SID est à inclure sur chaque lien de la page afin de propager la session aux autres pages.

La première solution est contraignante si vos utilisateurs refusent les cookies, mais reste tout de même la plus simple à mettre en place.
A savoir tout de même que si PHP est compilé avec --enable-trans-sid, les urls de la page seront modifiées par PHP pour rajouter l'identifiant de session.

A noter également que pour une création de cookie de session, l'appel de la fonction doit se situé avant toute autre sortie vers le navigateur, comme les fonctions header et setcookie.

2 - Que peut on faire avec un session ? (quelles fonctions sont disponibles pour manipuler les sessions)

Avant d'utiliser une session, il faut d'abord l'initialiser.
Comme dit précédemment, il existe 3 manières de démarrer une session :

  • PHP est configuré pour démarrer automatiquement les sessions

PHP peut être configuré de tel façon, via la php.ini, qu'il démarrera une session à chaque nouveau visiteur du site.

Pour activer cette option, il suffit de passer le paramètre de configuration session.auto_start à 1 dans la configuration.
C'est la façon la plus simple, mais pas forcément la plus répandue chez les hébergeurs.

  • Démarrer explicitement une session

PHP possède la fonction session_start(), qui , comme son nom l'indique, permet de démarrer une session.
Si le visiteur affiche pour la première fois une page de votre site depuis qu'il a lancé son navigateur, un identifiant lui est attribue.
Autrement, si il navigue depuis quelques pages, l'identifiant de session est récupéré et les variables lui étant associées sont accessibles.

  • Démarrer implicitement une session

On peut se passer du démarrage de session avec session_start() si l'on utilise la fonction session_register(), qui permet de stocker une variable dans une session.
Par cette méthode, PHP tente de déterminer si une session est active, et si ce n'est pas le cas, il la démarre avant de stocker la variable.

Voyons maintenant d'un peu plus près les fonctions permettant de manipuler les sessions.

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