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:
- session.use_cookies 1
- session.use_only_cookies 1
- 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!
1 De Palleas -
Un truc que je ne sais jamais... si à la base le visiteur n'accepte pas les cookies, on peut faire en sorte que ce soit fait via l'url ?
2 De Hugo -
Toujours aussi intéressants tes articles Nicolas ;) Par contre je vais te corriger quelques fautes que j'ai décelées par ci par là :
§1 : on n'utilise des sessions. => on utilise des sessions
§4 : Même si on fait pas le site d'une banque mais autant faire les choses bien. => Même si on ne fait pas...
§5 : si certains clients de ne les accpetent pas. => si certains clients ne les acceptent pas
++
Hugo.
3 De Hugo -
> Cet article n'a rien d'extraordinaire et n'est qu'une introduction pour l'article suivant.
J'ai bien dit "intéressants" ! Certes il n'est pas extraordinaire mais on apprend des choses et il est bien rédigé donc pour moi il est intéressant.