Ouverture d'une session avec php

Dans le but de sécuriser et d'améliorer une zone privée (zone membre) on n'utilise des sessions. Mais qu'est-ce qu'une session ? Comment cela fonctionne-t-il ? Le mécanisme des sessions fait appel à plein de notions ce qui rebutent souvent les débutants. On va tenter de démystifier tout cela.

Le mécanisme des sessions a été introduit nativement avec php4 à partir du modèle introduit par la librairie phplib dans php3. Une session est un mécanisme qui vise à pallier au fait que le protocole http est non connecté (même http 1.1!). Le principe: on transmet entre serveur et navigateur une clé (un identifiant de session) qui permet de garder la connexion. Dans la pratique, l'indentifiant de session est stocké dans le navigateur dans un cookie avec une durée de vie de 0 (c'est-à-dire que le cookie est supprimé à la fermeture du navigateur) et côté serveur un fichier, ayant comme nom l'identifiant de session, est crée contenant toutes les informations que l'on veut garder d'une page à une autre.

La création de la session se fait en créant le fichier côté serveur et en envoyant le cookie au client. Tout cela est fait avec la fonction session_start(). Après sur les pages suivantes on vérifie que la session est toujours valide. Pour que la session soit valide il faut que le cookie existe, que le fichier sur le serveur existe et que le dernier accès à ce fichier date de moins de session.gc_maxlifetime (1440 secondes par défaut). Si le dernier accès au fichier est plus ancien ou si le cookie n'existe plus alors la session est périmée et elle est détruite.

Il ne faut pas augmenter la durée de vie d'une session. Elle doit être courte. Par défaut elle est de 1440 secondes (soit 24 minutes). Plus les "données" à protéger sont sensibles plus il faut réduire la durée de vie de la session. Une session ne dure que le temps d'une visite. Au maximum il ne peut y avoir que session.gc_maxlifetime (1440) secondes entre deux clics pour maintenir la session. Ce n'est pas une bonne idée de vouloir augmenter cette durée. On s'expose à plus de risques de vols de sessions (cf doc php). Même si on fait pas le site d'une banque mais autant faire les choses bien.

On peut propager l'identifiant de session soit directement dans l'url, soit par des cookies. La propagation par cookie est la plus sûre même si certains clients de ne les accpetent pas. En général je ne crée des sessions qu'avec des clients qui acceptent les cookies (paramètre 1). Je refuse les autres (paramètre 2). Je ne transmets par l'identifiant dans l'url (paramètre 3). Les paramètres correspondant dans le fichier php.ini sont:

  1. session.use_cookies 1
  2. session.use_only_cookies 1
  3. session.use_trans_sid 0

Je n'ai fait qu'expliquer le mécanisme sans donner d'exemples. Ce sera l'objet d'un prochain article!

Haut de page