Les sessions PHP
Par Cyruss, mercredi 20 juillet 2005 à 14:24 :: PHP :: #34 :: rss
Les sessions sont adaptées à la sauvegarde de données confidentielles ou importantes. On peut citer quelques exemples courants de leur mise en application :
- authentifier un visiteur ;
- garder des informations sur un utilisateur tout au long de sa présence dans votre application ;
- gérer le panier d’achat d’un internaute sur votre site marchand ;
- mettre en place des formulaires en plusieurs parties et donc retenir les informations fournies dans les pages précédentes ;
- effectuer un cache par utilisateur de certaines actions coûteuses en ressources.
1 - Qu'est-ce qu'une session ?
Au lieu de stocker vos informations chez le visiteur, vous les stockez sur le serveur. Techniquement, vous attribuez au visiteur un identifiant. À chaque fois qu'il revient en annonçant cet identifiant, PHP récupérera toutes les informations qu'il avait sauvegardé et qui sont relatives à ce visiteur.
2 - Lecture et écriture
L'utilisation des sessions est très simple pour le programmeur : la manipulation est presque transparente et il suffit de lire ou d'écrire dans un tableau associatif classique une fois l'initialisation de la session faite.
La session s'initialise avec session_start(). PHP essaie alors de lire l'identifiant fourni par l'utilisateur, va chercher le fichier correspondant, et vous met à disposition les informations sauvegardées dans la superglobale $_SESSION[].
bool session_start ( void )
Ecriture d'une variable de sessions
Pour ecrire dans une variable de session il suffit d'initialiser les sessions via session_start() et d'ecrire dans la superglobale $_SESSION[].
Ecriture d'une variable de session
<?php // initialisation session_start() ; $_SESSION['langage'] = 'PHP 5'; ?>
Apres cette instanciation il sera possible sur toutes les pages suivantes d'afficher la valeur de la variable de session $_SESSION['langage'].
Lecture d'une variable de sessions
Lecture d'une variable de session
<?php
// initialisation
session_start() ;
// tester la présence de la variable 'langage' dans la session
if ( isset( $_SESSION['langage'] ) ) {
echo 'langage existe dans la session et sa valeur est ' ;
// lecture de la variable de session 'langage'
echo $_SESSION['langage'] ;
} else {
echo 'langage n\'existe pas dans la session' ;
}
?>
Pour résumer, les informations de session se manient exactement comme des variables PHP. Vous pouvez ajouter, enlever ou modifier des éléments à la session simplement en modifiant le tableau de session.
Suppression d'une session
PHP efface la session de lui-même au bout d'un certain temps.
Si vous voulez forcer la destruction de la session vous pouvez utiliser la fonction session_destroy().
Suppression d'une variable de session
<?php // on initialise et utilise la session session_start(); $_SESSION['nom'] = 'Pierre'; echo $_SESSION['nom']; // affiche Pierre // divers traitements // on détruit la session session_destroy(); unset($_SESSION['nom']); echo $_SESSION['nom'] ; // n'affiche rien ?>
Notez que cette fonction ne fait qu'effacer le fichier de données sur le serveur, elle n'efface pas les variables présentes dans $_SESSION[] ni ne supprime le cookie. Si vous voulez éviter tout risque de confusion, effacez $_SESSION[] aussi.
Grossomodo c'est tout ce qu'il faut savoir pour utiliser des variables de sessions. Si vous voulez voir une mise en pratique regardez le tutoriel sur la création d'un espace sécurisé.
3 - Configuration des sessions
Attention cette partie ne s'adrèsse qu'aux personnes ayant des besoins spécifiques qui ont la main sur leur serveur. Générallement la configuration par défaut suffira largement.
Les directives de configuration suivantes se trouvent dans le fichier de configuration php.ini au dessous de l’entrée [session]. Presque toutes sont redéfinissables pendant l’exécution du script via la fonction ini_set().
Initialisation des sessions
Le nom de la session par défaut (et donc du cookie envoyé pour la session) peut être changé au niveau de la configuration pour ne pas avoir à faire un appel à session_name()en haut de chaque script. La directive est session.name.
session.name = "PHPSESSID"
Vous pouvez aussi demander à PHP de démarrer automatiquement la gestion des sessions sur chacune de vos pages, vous évitant de faire un appel à session_start(). Pour obtenir ce comportement, il suffit de mettre la directive session.auto_start à 1 (la valeur par défaut est 0). Cela peut toutefois entraîner une charge supplémentaire non négligeable si vous n’utilisez pas les sessions dans tous vos scripts.
session.auto_start = 0
Stockage des données de session
Le répertoire de sauvegarde par défaut et le module utilisé pour la sérialisation sont aussi modifiables via le fichier de configuration. Les directives utilisées sont session.serialize_handler et session.save_path. Les paramètres sont les mêmes que pour les fonctions session_module_name()et session_save_path().
session.serialize_handler = "php"
session.save_path = "/tmp"

Commentaires
1. Le lundi 12 septembre 2005 à 00:21, par rgwarrior
2. Le dimanche 16 octobre 2005 à 22:29, par thall0s
3. Le vendredi 28 octobre 2005 à 15:49, par arthemisia
4. Le jeudi 17 novembre 2005 à 11:42, par NicoYougo
5. Le jeudi 19 janvier 2006 à 13:52, par Julien
6. Le mercredi 25 janvier 2006 à 16:46, par rane
7. Le samedi 4 février 2006 à 00:38, par momo
8. Le mardi 28 février 2006 à 16:42, par bzzzzzzz
9. Le mardi 14 mars 2006 à 09:59, par Malkkit
10. Le jeudi 27 avril 2006 à 19:43, par samba
11. Le mardi 2 mai 2006 à 16:06, par tansel
12. Le mercredi 3 mai 2006 à 01:03, par Deepblue
13. Le samedi 20 mai 2006 à 23:24, par casino gambling
14. Le lundi 22 mai 2006 à 11:34, par dolf
15. Le mercredi 24 mai 2006 à 23:21, par Deepblue
16. Le vendredi 26 mai 2006 à 17:42, par zoam
17. Le mardi 30 mai 2006 à 14:38, par un homme a part
18. Le mardi 25 juillet 2006 à 16:48, par moujane
19. Le jeudi 17 août 2006 à 19:32, par willyf
20. Le mardi 12 septembre 2006 à 11:20, par abdou
21. Le dimanche 17 septembre 2006 à 14:08, par GC
22. Le jeudi 12 octobre 2006 à 22:24, par younes371
23. Le mercredi 18 octobre 2006 à 16:01, par robby83
24. Le dimanche 19 novembre 2006 à 04:58, par evey
25. Le mercredi 6 décembre 2006 à 22:46, par tou
26. Le dimanche 17 décembre 2006 à 18:01, par ollogram
27. Le samedi 30 décembre 2006 à 08:06, par fox
28. Le dimanche 14 janvier 2007 à 13:33, par Blackthirteen
29. Le vendredi 19 janvier 2007 à 11:07, par hamada86
30. Le jeudi 8 février 2007 à 10:14, par marial
31. Le mardi 6 mars 2007 à 18:39, par Dog
32. Le jeudi 19 avril 2007 à 19:32, par astico
33. Le vendredi 11 mai 2007 à 22:36, par zied
34. Le vendredi 11 mai 2007 à 22:36, par zied
35. Le samedi 30 juin 2007 à 21:13, par babychou
36. Le vendredi 6 juillet 2007 à 21:20, par T0T0
37. Le jeudi 26 juillet 2007 à 17:39, par Nathoune
38. Le dimanche 7 octobre 2007 à 23:02, par Mik
39. Le lundi 8 octobre 2007 à 09:37, par Charlie
40. Le vendredi 12 octobre 2007 à 20:40, par so13
41. Le mardi 30 octobre 2007 à 19:07, par bubuche
42. Le dimanche 4 novembre 2007 à 17:21, par bizzi
43. Le jeudi 8 novembre 2007 à 11:44, par reeflox
44. Le mercredi 21 novembre 2007 à 09:18, par Twistix
45. Le lundi 26 novembre 2007 à 18:39, par winux
46. Le samedi 5 janvier 2008 à 00:44, par test qi
47. Le lundi 28 janvier 2008 à 17:53, par wolvi
48. Le lundi 25 février 2008 à 18:13, par squisy
49. Le vendredi 29 février 2008 à 17:12, par abdeweb
50. Le jeudi 29 mai 2008 à 01:55, par lezard
51. Le mardi 24 juin 2008 à 19:29, par camillecase
52. Le mardi 24 juin 2008 à 19:31, par camillecase
53. Le jeudi 3 juillet 2008 à 15:13, par azou
54. Le dimanche 6 juillet 2008 à 17:34, par azizou
55. Le samedi 12 juillet 2008 à 12:06, par Vista x64
56. Le samedi 25 avril 2009 à 15:43, par Abdel
57. Le jeudi 27 août 2009 à 16:31, par winux
58. Le vendredi 4 septembre 2009 à 19:22, par zeussss
59. Le mardi 29 décembre 2009 à 04:29, par marios
60. Le vendredi 15 janvier 2010 à 04:22, par roseee
Ajouter un commentaire