Une session est un système de sauvegarde temporaire des informations concernant un utilisateur. A chaque ouverture de session, l'internaute se voit attribuer un identifiant. D'où l'intérêt des sessions, on peut maintenant personnaliser notre application en fonction de chaque utilisateur sans utiliser de base de données.
Cet identifiant peut-être transmis soit en GET (c'est-à-dire que l'identifiant est ajouté à la fin de l'url), soit en POST (c'est-à-dire que l'identifiant est stocké dans un Cookie sur l'ordinateur de l'utilisateur) selon la configuration du serveur. Les informations seront à disposition tout le long de la session. On peut bien sûr les modifier. Une session peut contenir tout type de données : nombre(entier, flottant), chaîne de caractères et même tableau.
Contrairement à une base de données ou un système de fichiers, la session conserve les informations pendant quelques minutes. Cette durée dépend de la configuration du serveur mais est généralement fixée à une trentaine de minutes (par défaut).
Parmi les utilisations les plus courantes de session, on trouve :
L'initialisation doit se faire au début de chaque page. Avant tout autre envoi au navigateur. Dans le cas contraire voici les erreurs qui peuvent se produirent :
Si vous avez ces erreurs, vous savez quoi faire !
PHP introduit nativement une fonction permettant de démarrer ou de continuer une session. Il s'agit de session_start(). Cette fonction ne prend pas de paramètre et renvoit toujours true. Elle vérifie l'état de la session courante. Si elle est inexistante, alors le serveur la crée sinon elle la poursuit.
Cet appel doit se faire sur toute les pages utilisant le système de session.
Lorsqu'une session est créée, elle est par défaut vide. Il faut donc lui attribuer des valeurs. Pour cela, le langage PHP met en place le tableau superglobal $_SESSION. Le tableau $_SESSION peut-être indexé numériquement mais aussi associativement. En règle générale, on préfère la seconde afin de pouvoir donner des noms de variables de session, histoire de mieux s'y retrouver.
Pour enregistrer une nouvelle variable de session, c'est très simple. Il suffit juste d'ajouter une valeur au tableau $_SESSION comme suis :
Le tableau $_SESSION était jusqu'à lors vide. Maintenant le tableau contient une variable portant le nom Mavariable et comportant la valeur 1394.
Maintenant si on souhaite l'afficher, il suffit de faire :
C'est le même principe pour la modifier.
Le serveur détruit lui même la session au bout d'un certain laps de temps si la session n'a pas été renouvellée. En revanche, il est possible de forcer sa destruction grâce à la fonction session_destroy(). Cela permet par exemple de proposer un bouton de déconnexion aux membres d'un site. Cependant, l'utilisation de session_destroy() seule n'est pas très "propre". Voici une manière un peu plus propre et plus sûr :
Voilà pour ce qui est des sessions. Vous devez maintenant être capable de faire un espace membre. Bonne chance ! Si vous avez des questions, n'hésitez pas.
La sécurité est une chose importante dans les sessions, surtout pour les espaces membres. Voivi quelques recommandations :
Tout d'abord, même si votre serveur vous l'autorise, utilisez toujours les Cookies. Et surtout pas la méthose GET. Cela permettra d'éviter le piratage par dessus l'epaule.
N'augmenter pas la durée de validité des sessions.
En ce qui concerne le formulaire d'authentification qui donne accès à la session, utilisez bien la méthode POST et non GET.
Dans un espace membre, vérifier l'existence de la session. Si elle n'existe pas, faites une redirection vers le formulaire d'authentification. Par exemple :
Dans cet exemple, si, lors de la création de la session, on a placé dans le tableau de la session, une variable login, on doit forcément pouvoir la retrouver.
Si ce n'est pas le cas, c'est qu'il n'y a pas de session valide, donc redirection vers la racine du site.
Voici un article sur la sécurité des sessions : php security consortium.