Les variables de session permettent de conserver des informations qui demeureront disponibles quand une nouvelle page Web du même site sera affichée.
Elles sont stockées dans un tableau nommé $_SESSION.
Par exemple, une variable de session qui retient le code d'un usager pourrait s'appeler $_SESSION['usager'];
Chaque page qui a besoin des variables de session doit démarrer la session à l'aide de l'instruction session_start().
L'instruction session_start() doit être exécutée avant que des informations aient été envoyées au navigateur.
Si vous ne respectez pas cette condition, les variables de session ne fonctionneront pas et vous obtiendrez l'avertissement « Warning: session_start(): Session cannot be started after headers have already been sent ».
De plus, si vous exécutez une instruction session_start() alors qu'il y a déjà eu un session_start(), les variables de session fonctionneront mais vous obtiendrez l'avis « Notice: session_start(): Ignoring session_start() because a session is already active ».
Le meilleur endroit pour initialiser la session est dans le fichier configuration.inc.
@session_start();
Afin de vous prémunir contre d'éventuelles attaques, il faut faire précéder le session_start() par le caractère @ (opérateur de contrôle d'erreur). Ceci fera en sorte que si la fonction génère un avis ou un avertissement, le message d'erreur ne sera jamais affiché à l'écran peu importe les configurations du serveur.
Pour créer une variable de session et lui assigner une valeur :
$_SESSION['nom_variable_session'] = valeur;
Ex :
$_SESSION['usager'] = 'toto';
ou :
$_SESSION['usager'] = $usager;
Si on tente de lire le contenu d'une variable de session alors qu'elle n'existe pas, ceci fera planter le programme. Il faut donc toujours vérifier son existance avant de tenter de l'utiliser.
Pour vérifier si une variable de session existe :
if (isset($_SESSION['nom_variable_session'])) {
...
}
Ex :
if (isset($_SESSION['usager'])) {
...
}
Pour lire le contenu d'une variable de session :
$variable = $_SESSION['nom_variable_session'];
Ex :
$usager = $_SESSION['usager'];
Parfois, on pourra avoir besoin d'un algorithme qui agit différemment si une variable de session existe et si elle n'existe pas. Il faudra donc prendre soin de la détruire lorsque requis.
Pour détruire une variable de session :
unset($_SESSION['nom_variable_session']);
Ex :
unset($_SESSION['usager']);
Un résultat semblable sera obtenu en mettant la variable à null.
Ex :
$_SESSION['usager'] = null;
Avec ces deux techniques, isset($_SESSION['...']) retournera false.
Il existe de petites différences entre unset() et =null, notamment au niveau de la gestion de la mémoire (unset() libère plus de mémoire) et de la vitesse d'exécution (= null est plus rapide) mais pour l'essentiel, l'une ou l'autre des techniques peuvent être utilisées (voir discussion ici : https://stackoverflow.com/questions/13667137/the-difference-between-unset-and-null).
Voici un petit exemple qui utilise plusieurs des instructions précédentes :
@session_start();
...
if (!isset($_SESSION['usager'])) {
echo '<a href="authentification.php">Cliquez ici pour vous authentifier.</a>';
$_SESSION['page_retour_authentification'] = basename($_SERVER['SCRIPT_NAME']);
}
else {
$usager = $_SESSION['usager'];
echo "Bienvenue, $usager !";
echo '<a href="deconnexion.php">Déconnexion</a>';
}
▼Publicité