Les sessions en PHP
Les sessions permettent de transmettre des données concernant un internaute d'une page web à l'autre pendant la navigation de celui-ci. Lorsque l'internaute accède une première fois sur l'une ou l'autre des pages web qui implémentent une session, un cookie est déposé dans le navigateur de celui-ci pour indiquer le serveur web qui est à l'origine de la session. Pendant toute la navigation sur ce serveur web une référence à ce cookie sera transmise d'une page à l'autre. Lorsque l'internaute quitte le site, en fait au bout d'un certain temps paramétré pendant lequel il n'a accédé à aucune page du serveur, le cookie est détruit et toutes les informations collectées disparaissent.
Configuration de PHP
Pour que les sessions fonctionnent en PHP, il faut que le serveur Web soit configuré pour. C'est facile à vérifier en faisant appel à la fonction phpinfo() dans une page PHP.
Si ce n'est pas le cas, il faut activer cette option. Cela se passe dans le fichier php.ini. Modifier php.ini est assez délicat. Mais les sessions sont activées par défaut lors de l'installation de PHP 7.
L'objet Session de PHP
Lorsque l'internaute se connecte un cookie dont le nom est PHPSESSID est créé avec une valeur cryptée. Relativement à ce cookie, un objet session est instancié.
En PHP la session relative au cookie de session est accessible par la variable globale $_SESSION (avec un caractère souligné derrière le dollar. Cette variable est structurée comme une tableau associatif, un dictionnaire clef = valeur.
Il est possible d'y enregistrer des données applicatives pour passer des informations d'une page web à l'autre.
Pour modifier le contenu de l'objet session, il suffit d'affecter une valeur dans le tableau associatif :
En PHP la session relative au cookie de session est accessible par la variable globale $_SESSION (avec un caractère souligné derrière le dollar. Cette variable est structurée comme une tableau associatif, un dictionnaire clef = valeur.
Il est possible d'y enregistrer des données applicatives pour passer des informations d'une page web à l'autre.
Pour modifier le contenu de l'objet session, il suffit d'affecter une valeur dans le tableau associatif :
<?php
$_SESSION["nom"] = "LIMOUZIN";
?>
$_SESSION["nom"] = "LIMOUZIN";
?>
L'affichage du contenu de la session procède du même principe que l'affichage de n'importe quelle variable PHP :
<p>
nom = <?= $_SESSION["nom"] ?>
</p>
nom = <?= $_SESSION["nom"] ?>
</p>
Pour supprimer une valeur dans la session, on utilise la fonction session_unset :
<?php
session_unset("nom");
?>
session_unset("nom");
?>
Structure d'une page PHP qui utilise les sessions
Toutes les pages qui utilisent les sessions doivent impérativement faire un appel à la fonction session_start(). Cet appel doit être fait au tout début du script, avant la directive DOCTYPE du HTML.
Pour illustrer le ce fonctionnement, nous allons réaliser deux pages PHP, la première, session.php, va initialiser le cookie de session avec des valeurs. La seconde, page1.php, appelée grâce à un lien hypertexte, va afficher les valeur contenues dans le cookie.
Contenu de session.php
<?php
session_start();
$_SESSION["nom"] = "LIMOUZIN";
$_SESSION["prenom"] = "André Pierre";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>sans titre</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta name="generator" content="Geany 1.29" />
</head>
<body>
<h2>Variables de session</h2>
<table border="1">
<tr><th>Clef</th><th>Valeur</th></tr>
<?php
foreach ($_SESSION as $key=>$value)
{
echo "<tr><td>$key</td><td>$value</td></tr>";
}
?>
</table>
<p><a href="page1.php">Lien vers Page 1</a></p>
<p>
nom= <?= $_SESSION["nom"] ?>
</p>
</body>
</html>
session_start();
$_SESSION["nom"] = "LIMOUZIN";
$_SESSION["prenom"] = "André Pierre";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>sans titre</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta name="generator" content="Geany 1.29" />
</head>
<body>
<h2>Variables de session</h2>
<table border="1">
<tr><th>Clef</th><th>Valeur</th></tr>
<?php
foreach ($_SESSION as $key=>$value)
{
echo "<tr><td>$key</td><td>$value</td></tr>";
}
?>
</table>
<p><a href="page1.php">Lien vers Page 1</a></p>
<p>
nom= <?= $_SESSION["nom"] ?>
</p>
</body>
</html>
Contenu de page1.php
<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Page 1</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta name="generator" content="Geany 1.29" />
</head>
<body>
<h1>Page 1</h1>
<h2>Variables de session</h2>
<table border="1">
<tr><th>Clef</th><th>Valeur</th></tr>
<?php
foreach ($_SESSION as $key=>$value)
{
echo "<tr><td>$key</td><td>$value</td></tr>";
}
?>
</table>
</body>
</html>
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Page 1</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta name="generator" content="Geany 1.29" />
</head>
<body>
<h1>Page 1</h1>
<h2>Variables de session</h2>
<table border="1">
<tr><th>Clef</th><th>Valeur</th></tr>
<?php
foreach ($_SESSION as $key=>$value)
{
echo "<tr><td>$key</td><td>$value</td></tr>";
}
?>
</table>
</body>
</html>
Test des sessions
Lors du chargement de la page session.php, les deux valeurs nom et prenom sont enregistrées dans le cookie.
Lorsque l'internaute clique le lien vers la Page 1, la page ci-dessous s'affiche. Les valeurs contenues dans le cookie sont affichées.
Les valeurs ainsi enregistrée peuvent être transmises de page en page jusqu'à ce que l'internaute se déconnecte ou quitte le site. Par défaut la durée de la session est fixée à 180 secondes (3mn). Mais cela peut être aussi paramétré dans php.ini.
Lorsque l'internaute clique le lien vers la Page 1, la page ci-dessous s'affiche. Les valeurs contenues dans le cookie sont affichées.
Les valeurs ainsi enregistrée peuvent être transmises de page en page jusqu'à ce que l'internaute se déconnecte ou quitte le site. Par défaut la durée de la session est fixée à 180 secondes (3mn). Mais cela peut être aussi paramétré dans php.ini.
Avertissement
Le fonctionnement des sessions ne fonctionne que sur un seul serveur. En effet, le cookie de session est directement associé au serveur Web qui joue la fonction session_start. Dans le cas, où plusieurs serveurs peuvent répondre en équilibrage de charge (load-balancing), il y a peut de chance pour que ce soit le même serveur qui serve à la suite session.php et page1.php. Pour tester cet article, j'ai du désactiver tous les serveurs pour n'en laisser qu'un seul répondre sur le cluster.
Une solution à ce problème appelé "affinité des session" passe par le paramétrage du proxy qui gère l'équilibrage de charge. Ce fera l'objet d'un article ultérieur intitulé "L'affinité de session avec ClusterHAT".
Commentaires
Enregistrer un commentaire