====== Les sessions multiples en PHP ====== Voici une méthode permettant de faire cohabiter et communiquer deux sessions (ou plus) en PHP. Ceci peut vous être utile si vous avez plusieurs applications Web hébergées sur le même domaine et que vous désirez les faire communiquer entre elles via leurs sessions PHP. Pour rappel, une session PHP est constituée de : * un identifiant de session : c'est ce qui identifie de façon unique la session de l'utilisateur. Cet identifiant est sensible, il peut être la source de failles de sécurités, il ne faut pas le diffuser publiquement. * une nom de session : c'est le nom du cookie dans lequel on retrouvera l'identifiant de la session. * les données : par défaut elles sont stockées dans un fichier unique sur le disque dur à la fin de l'exécution des scripts PHP. Faire cohabiter plusieurs sessions PHP consiste donc à faire cohabiter plusieurs cookies de session et donc à gérer plusieurs noms de sessions. Tout d'abord, ce premier script très simple va créer une session ayant pour nom "SESSION1" avec pour contenu la clé/valeur "data" et le timestamp du moment : L'exécution de ce script devrait donner quelque chose comme ça : int 1271526946 string '6da12c25c44ef378e9d276a91f19f748' (length=32) Le premier chiffre (integer) correspond au timestamp et la chaîne de caractère correspond à l'identifient de session. __Remarque__ : la session est nommée à l'aide de la fonction ''session_name(...)''. Si on omet ceci, le nom de la sessions sera celui indiqué dans la configuration ''php.ini'' du serveur Web. Créons maintenant un second script qui aura pour objectif d'afficher le contenu de la session ayant pour nom "SESSION2" : Exécutons le, il retourne quelque chose comme ça : null string '30d7f2f8c00b9929a740d0516b1664b9' (length=32) Ceci est tout à fait normal car l'exécution de ce script a simplement provoqué la création de la session nommée "SESSION2" mais elle reste vide pour le moment. Nous allons maintenant écrire un script dont le but sera de transférer le contenu de "SESSION1" vers "SESSION2". Ceci nécessite l'ouverture des deux sessions dans le même script PHP, c'est maintenant que ça ce complique un peu : On commence par ouvrir "SESSION1", on récupère son contenu puis on la ferme à l'aide de ''session_write_close()''. Ensuite on ouvre "SESSION2" et on lui copie les données précédemment récupérées depuis "SESSION1". Une étape importante est la régénération de l'identifiant de "SESSION2" via la méthode ''session_regenerate_id()''. Sans cette étape, l'identifiant de session de "SESSION2" deviendrait le même que celui de "SESSION1" ce qui serait très embêtant car on perdrait alors l'indépendance entre ces deux sessions. On exécute ce script puis on s'assurer que le contenu de "SESSION2" est bien le bon en reexécutant le script précédent. Il devrait retourner quelque chose comme ça : int 1271526946 string 'e47ccd849fe778ca4cc59688ae73281c' (length=32) On remarque que le timestamp est le même que dans "SESSION1". Par contre on remarque que l'identifiant de sessions a changé mais ceci est normal car c'est la conséquence de l'appel à ''session_regenerate_id()''. Ceci n'est pas très optimisé mais on conserve l'essentiel : l'identifiant de "SESSION1" reste différent de celui de "SESSION2". On peut maintenant effacer le contenu de "SESSION1" à l'aide ce ce script : On constatera que ceci n'a aucun impacte sur le contenu de "SESSION2". Les deux sessions restent bien indépendantes et "SESSION2" a récupéré les données contenues dans "SESSION1". Objectif atteint ! {{tag>article computing php multi session}} ~~DISCUSSION~~