détruire session

détruire session - PHP - Programmation

Marsh Posté le 17-02-2005 à 10:49:14    


slt a tous
 
est ce qu'une session est détruite automatiquement lorsque l'on ferme le navigateur
sinon comment le faire
 
merci

Reply

Marsh Posté le 17-02-2005 à 10:49:14   

Reply

Marsh Posté le 17-02-2005 à 10:51:48    

aquastar a écrit :

slt a tous
 
est ce qu'une session est détruite automatiquement lorsque l'on ferme le navigateur
sinon comment le faire
 
merci


 
oui

Reply

Marsh Posté le 17-02-2005 à 11:01:18    

oui mais quand je regarde dans le répertoire où est stocké la session il y a toujours un fichier de type Internet Signup qu'est ce que c'est?

Reply

Marsh Posté le 18-02-2005 à 10:16:51    

je me rend compte que la session n'est pas détruite lorsque l'on ferme le navigateur !!!!!!!!!!
qui peux m'aider???????

Reply

Marsh Posté le 18-02-2005 à 10:28:43    

ya un timeout, si tu rouvre le navigateur au bout de 2 sec, elle est pas détruite, mais après elle va l'etre...
c'est paramètrable dans ton php.ini ou via ini_set si tu n'a pas accès à ton fichier de conf...
 
regarde du coté de:
- session.cookie_lifetime
- session.gc_maxlifetime
 
EDIT: et pitete celle-la aussi  
- session.cache_expire


Message édité par Xav_ le 18-02-2005 à 10:29:55

---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 18-02-2005 à 10:37:07    

j'ai accés à mon fichier de conf et mon session.cookie_lifetime =0 donc le cookie a une durée de vie jusqu'à ce que le navigateur soit fermé
 
mais dans mes fichiers php je n'utilise pas les sessions du moins je pense car je fais juste un session.auto_start() au début de chaque page!!!!!!!!
que me conseillez vous?

Reply

Marsh Posté le 18-02-2005 à 10:47:26    

aquastar a écrit :

j'ai accés à mon fichier de conf et mon session.cookie_lifetime =0 donc le cookie a une durée de vie jusqu'à ce que le navigateur soit fermé
 
mais dans mes fichiers php je n'utilise pas les sessions du moins je pense car je fais juste un session.auto_start() au début de chaque page!!!!!!!!
que me conseillez vous?


 
Euh, comme ça, au hasard ? ... De lire la doc non ? :D


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 18-02-2005 à 11:20:21    

je te file 3 variables à regarder, tu vois que la premiere est bien réglé donc tu t'arrete là...
Ben ouais, comme l'a dis Dj Yell --> RTFM !!!


Message édité par Xav_ le 18-02-2005 à 11:20:40

---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 18-02-2005 à 11:27:45    

je viens de tester les 3 variables et aucun changement!!!!

Reply

Marsh Posté le 18-02-2005 à 11:36:07    

http://doc.domainepublic.net/php/d [...] etime.html
ça semble etre "session.gc_maxlifetime" qui spécifie la durée de vie des infos de session sur le serveur (en seconde)  
c'est de l'ordre de 1440 à l'origine, ça fait quand meme 24 minutes !!!
t'a essayé en baissant cette valeur ???


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 18-02-2005 à 11:36:07   

Reply

Marsh Posté le 18-02-2005 à 11:39:00    

je l'i testé à 0 et pareil

Reply

Marsh Posté le 18-02-2005 à 11:48:38    

aquastar a écrit :

je l'i testé à 0 et pareil


sauf qu'en général pour ce genre de variable, on met "0" quand on veut dire "pas de limite", donc "1" serait plus approprié pour que ça expire vite ;) (mais tu as peut etre déjà essayé aussi)...


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 18-02-2005 à 12:10:36    

nan 1 ca change rien!!!!

Reply

Marsh Posté le 18-02-2005 à 13:58:25    

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.

Reply

Marsh Posté le 18-02-2005 à 17:49:16    

merci pour tes eclaircissement
 
j'utilise des sessions psécifdiques donc avec session_destroy() donc quand l'user se déconnecte la session est bien détruite  
mais mon pb cété quand l'user ferme le navigateur sans fermer la session....
merci

Reply

Marsh Posté le 18-02-2005 à 17:53:39    

Citation :

mais mon pb cété quand l'user ferme le navigateur sans fermer la session...


ben comme te l'a dis Cerel, le serveur PHP n'est pas chez le client --> il ne sait pas que le navigateur à été fermé, donc il faut attendre que les données "expirent" et ça va se faire avec les durées spécifiées dans les variables que je t'ai filé normalement


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 18-02-2005 à 17:56:23    

j'ai compris merci a tous

Reply

Marsh Posté le 18-02-2005 à 20:00:20    

de rien :jap:


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed