Depuis PHP4, il est possible de définir des sessions entre le client et un serveur web.
Quand une session démarre, le serveur web crée un identificateur de session (session ID). Le "session_ID" est stocké dans un cookie chez le client. Le navigateur envoie le "session ID" à chaque fois qu’une page est demandée. Le serveur utilise ce "session ID" pour mettre à jour ses variables.
Quand la session se termine, les données sur le serveur sont enlevées.
Les fonctions de session commencent toutes par session_.
L’utilisation des variables de session nécessitent 3 phases :
Démarrer la session avec session_start()
Enregistrer les noms des variable de session avec session_register ()
Utiliser les variables de session
Exemple avec le programme session1.html qui appelle session2.html
Listing de session1.html :
<?php
session_start ();
session_register ("aUser", "aAccount");
$aUser = "alain";
$aAccount= "1016";
?>
<html>
<head><title> Etude d'un session </title>
</head>
<body>
<?
print ("Utilisateur courant: $aUser<br>");
print ("Compte courant: $aAccount<br>");
?>
<br><br>
<a href= "session2.html"> Aller à la page 2 </a>
</body>
</html>
Listing de session2.html : <?php
session_start ();
?>
<html>
<head><title> Etude d'un session </title>
</head>
<body>
<?
print ("Utilisateur courant: $aUser<br>");
print ("Compte courant: $aAccount<br>");
?>
</body>
</html>
session_start () doit être exécuté avant toute information envoyée au navigateur
session_register () indique les variables à garder dans le cookie. Ici $aUser et $aAccount
Quand l’utilisateur clique sur "Aller à la page 2", le navigateur envoie de façon transparente le "session ID" au serveur, et les variables sont récupérées dans le 2ème programme.
Il es possible d’imprimer le "session ID" avec la variable PHP $PHPSESSID. Dans la configuration par défaut d’Apache, les informations de session sont stockées dans /tmp dans un fichier de forme sess_$PHPSESSID ;
Ex : sess_4f7e209392cd95a3c4b25ce2ac35d942 qui contient :
aUser|s:5 :"alain" ;aAccount|s:4 :"1016" ;
Dans le cas où l’utilisateur refuse les cookies, il faut prévoir d’autres méthodes, en passant manuellement le "session ID" en tant que variable GET ou POST Reprenons le programme session1.html et modifions le :
<?php
session_start ();
session_register ("aUser", "aAccount");
$aUser = "alain";
$aAccount= "1016";
?>
<html>
<head><title> Propagation du SessionID </title>
</head>
<body>
<?
print ("Utilisateur courant: $aUser<br>");
print ("Compte courant: $aAccount<br>");
?>
<br><br>
<a href= "session2.html?<?=SID?>"> Aller à la page 2 </a>
</body>
</html>
La constante PHP SID contient le numéro de session
Inconvénient : chaque lien et chaque formulaire dans l’application doit contenir < ?=SID ?>. Sinon le "session ID" est perdu et l’application sera bloquée
Pour y remédier, PHP a une option --enable-trans-sid. Il suffit de recompiler PHP avec cette option. Le code devient : <?php
session_start ();
session_register ("aUser", "aAccount");
$aUser = "alain";
$aAccount= "1016";
?>
<html>
<head><title> Etude d'un session </title>
</head>
<body>
<?
print ("Utilisateur courant: $aUser<br>");
print ("Compte courant: $aAccount<br>");
?>
<br><br>
<a href= "session2.html"> Aller à la page 2 </a>
</body>
</html>
C’est à dire le même que dans la première version de session1.html. Par contre les liens doivent être relatifs : "session2.html" est bon, "http://monsite.fr/session2.html" est mauvais
Une fois que la décision de l’endroit où garder le "session ID" est prise, il faut stocker les variables dans une base de données.