Je vais apporter mon grain de sel.
Premierement, j'ai l'impression que tu n'as pas tout a fait compris comment fonctionne les sessions en php. Deja, php c'est un langage cote serveur, en aucun cas il peut "savoir" quand le visiteur ferme son navigateur... Donc a la quesion "est ce qu'une session est détruite automatiquement lorsque l'on ferme le navigateur ", je repons "non, impossible".
Comment fait php pour associer une session a un visiteur ?? Pour ce faire, php a besoin d'un identifiant unique pour chaque visiteur. C'est le "phpsessionid". La il existe 2 facons d'associer l'id au visiteur. La premiere maniere de l'associer est d'utiliser des cookies. Ainsi des la creation de la session, un cookie est cree chez le visiteur avec l'id de la session.
La deuxieme facon de le faire, et qui est utilise quand le visiteur n'accepte pas les cookies, est de "modifier" les liens dans la page que le visiteur visite. Ainsi on va "coller" l'id de la session dans les liens. De cette facon, tant que le visiteur utilise les liens dans la page, php connaitra le session id.
Que se passe-t-il quand le visiteur ferme son navigateur ?
1) Si la session utilise des cookies, le cookie est efface par le navigateur (mais la session sur le serveur existe encore car php ne sait pas ce que fait le visiteur sur sa machine).
2) Si le visiteur n'avait pas de cookie, rien n'est fait (concernant la session). Seulement si le visiteur revient sur la page sans que le session id ne soit colle dans l'adresse, alors une nouvelle session est cree (et le session id sera colle dans tous les liens de la page).
Comment fait php pour effacer les sessions ?? Il se base sur en tout cas 2 parametres : le temps de vie de la session, et le "gc" (garbage collector).
Le garbage collector est un mecanisme qui sert a php de verifier ce qui doit etre efface ou pas. Il vas par exemple lancer le gc toutes les minutes pour voir si des sessions ont depasse la duree de vie. Si tel est le cas, alors la session est detruite.
Ces deux parametres sont importants. En effet il ne sert pas a grand chose d'avoir un gc toutes les 10 secondes si la duree de la session est illimitee. Ou bien cela ne sert a rien d'avoir la duree de la session a 1 minutes, si le gc n'est jamais appele...
Encore une petite precision, la duree de vie de la session n'est pas une duree "limite". Mais plutot une duree "d'expiration". En gros tant que le visiteur se promene sur le site, la session est rafraichie. Mais une fois que ce dernier parts, la session n'est plus mise a jour, et de ce fait elle va expirer.
Comment faire pour effacer la session alors ?
Ben il existe plusieurs "solutions".
Laisser php s'en occuper.
Une autre solution consiste a "s'en charger soit meme". Comment ?
En metant en place un systeme de "log out" sur le site. En effet, la pluspart du temps il existe "2 types" de sessions.
La session "generique" : des que le vistieur arrive sur le site, la session est cree.
La session "specifique" : la session est cree lorsque le visiteur fait quelque chose de special. Par exemple si ce dernier se "logue" sur le site.
En integrant un systeme de "log out" sur le site, on permet au visiteur de detruire la session specifique.
Pour se faire il faut simplement faire un "session_destroy()" lors du "log out".
Certains sites, peuvent egalement utiliser les deux types de sessions a la fois. La session generique peut par exemple contenir des variables pour permetre aux pages de savoir si le visiteur est logue ou non ($pseudo, $userid, $loged ...). Du coup, la session generique n'aura pas (ou aura des valeurs par defaut) les variables de login.
Dans le cadre d'un site qui melange les deux types de sessions, il peut y avoir un effet "bizzare" (mais neanmoins logique) lors de la destruction de la session specifique.
En effet, imaginons que le site cree une session "generique" dans "index.php". Lorsque l'user se delogue, et que sa session est detruite, une generique va etre cree. Ceci vient du fait que la pluspart du temps, lorsqu'un user est delogue, il est redirige vers l'index du site (et pas sur un autre site), donc du coup, une autre session sera cree.
Pour finir, je tiens a parler un peu des problemes de securite concernant les sessions.
Les sessions sont sotckees dans un repertoire sur le serveur. Ce repertoire est le meme pour tous les sites php qu'heberge se serveur. Donc du coup, un site "voisin" pourrait eventuellement "lire" une session d'un autre site. Mais avant qu'il puisse le faire, il devrait connaitre le session id de la session, ce qui n'est pas facil.
Il existe des methodes pour "eviter" ou minimiser ce risque. Par exemple crypter la session. Une autre methode consisterai a creer son propre "session handler" et de stocker les session ailleurs. Par exemple on pourrait stocker les sessions directement dans la BDD dans une table "sessions". Personnellement c'est ce que je fais, il y a d'autre sites qui le font. Si je me trompe pas, il y a phpbb qui le fait, ainsi que quelques CMS (Content Management System) comme par exemple Postnuke.
Donc voila, j'espere avoir clarifie un peu le fonctionnement des sessions.
aquastar : Si tu utilise des sessions "specifique", alors utilise un "session_destroy()" pour effacer ta session. Si tu utilise des sessions "generiques" alors laisse php faire son boulot.
PS :
En php il n'y a qu'un seul "type" de session. J'ai introduit les termes de "generique" et "specifique" afin de differencier la facon dont les sessions etaient crees, utilisees, et detruites.