Question sur les SESSIONS en PHP - Programmation
Marsh Posté le 06-02-2002 à 14:57:17
Je ne m'en suis pas encore servi mais je vois tres bien comment ca marche.
Le serveur ne peu t savoir quand tu ferme ton navigateur car cela se passe sur ton poste
Marsh Posté le 06-02-2002 à 15:06:28
7.1 Gestion des connexions
[Notes en ligne]
Note : Les informations suivantes ne sont valables qu'à partir de la version 3.0.7.
Le statut des connexions est conservé en interne par PHP. Il y a trois états possibles : @itemize @bullet
0 - NORMAL (normal)
1 - ABORTED (annulé)
2 - TIMEOUT (périmé)
Lorsqu'un script PHP est en cours d'exécution, son état est NORMAL. Si le client distant se déconnecte, le statut devient ABORTED. En général, une telle déconnexion provient d'un arrêt temporaire. Si la durée maximale d'exécution de PHP est dépassée, (voir set_time_limit()), le script prend le statut TIMEOUT.
Vous pouvez en outre décider si vous voulez que la déconnexion d'un client provoque l'arrêt de votre script. Il est parfois pratique de terminer le script, même si le client n'est plus là pour recevoir les informations. Cependant, par défaut, le script sera interrompu, et terminé dès que le client se déconnecte. Ce comportement peut être modifié avec la directive ignore_user_abort dans le fichier `php.ini' ou bien avec la directive Apache ignore_user_abort du fichier Apache `httpd.conf' ou avec la fonction ignore_user_abort(). Si vous ne demandez pas à PHP d'ignorer la déconnexion, et que l'utilisateur se déconnecte, le script sera terminé. La seule exception est si vous avez enregistré une fonction de fermeture, avec register_shutdown_function(). Avec une telle fonction, lorsque l'utilisateur interrompt sa requête, à la prochaine exécution du script, PHP va s'apercevoir que le dernier script n'a pas été terminé, et il va déclencher la fonction de fermeture. Cette fonction sera aussi appelée à la fin du script, si celui-ci se termine normalement. Pour pouvoir avoir un comportement différent suivant l'état du script lors de sa finalisation, vous pouvez exécutez des commandes spécifiques à la déconnexion grâce à la commande connection_aborted(). Cette fonction retournera TRUE si la connexion a été annulée.
Votre script peut aussi expirer après un laps de temps. Par défaut, le délai est de 30 secondes. Cette valeur peut être changée en utilisant la directive PHP max_execution_time dans le fichier `php.ini' ou avec la directive php3_max_execution_time, dans le fichier Apache `.conf' ou encore avec la fonction set_time_limit(). Lorsque le délai expire, le script est terminé, et comme pour la déconnexion du client, une fonction de finalisation sera appelée. Dans cette fonction, vous pouvez savoir si c'est le délai d'expiration qui a causé la fin du script, en appelant la fonction connection_timeout(). Cette fonction retournera vrai si le délai d'expiration a été dépassé.
Une chose à noter est que les deux cas ABORTED et TIMEOUT peuvent être appelés en même temps. Ceci est possible si vous demandez à PHP d'ignorer les déconnexions des utilisateurs. PHP va quand même noter le fait que l'utilisateur s'est déconnecté, mais le script va continuer. Puis, lorsqu'il atteint la limite de temps, le script va expirer. A ce moment-là, les deux fonctions connection_timeout() et connection_aborted() vont retourner TRUE. Vous pouvez aussi vérifier les deux états en un seul appel avec la fonction connection_status(). Cette fonction va retourner un champs de bits, avec les états. Si les deux états sont actifs, l'état retourné prendra la valeur 3.
donc ça pour détruire ta session en cas de déconnexion.
sinon faut voir aussi au niveau du paramétrage du cache et de la durée de vie de la session dans le php.ini
[edtfdsfsdfgdd]--Message édité par Sh@rdar--[/edtfdsfsdfgdd]
Marsh Posté le 06-02-2002 à 15:28:05
Je suis désolé, je ne comprend pas !
Je ne veux pas stoper un sript si le visiteur se déconnecte mais je souhaite effacer une session dans un repertoire de mon serveur.
Ceci peut t'il s'appliquer ?
Merci
Alex01
Marsh Posté le 06-02-2002 à 15:44:22
Le temps de vie d une session est défini dans la config de PHP (php.ini) avec la variable session.gc_maxlifetime. Je crois qu il n y a aucun autre moyen de detruire une session que d attendre le timeout mais je me trompe peut etre
Marsh Posté le 06-02-2002 à 16:03:22
Je viens de voir les paramètres de session.gc_maxlifetime qui sont réglés à 24 min mais ça n'a pas l'air de fonctionner car au terme de ce délais les sessions ne s'effacent pas
session.gc_maxlifetime fixe la durée, en secondes, au−delà de laquelle les données considérées comme inutiles seront supprimées.
session.cache_expire spécifie la durée de vie des pages de session cachées, en minutes, mais sans que
cela ait d'effets sur le limiteur "nocache". Par défaut, 180.
Par contre je ne sais pas si ce dernier paramètre ne correspond pas à ce que je cherche : effacer les vielles sessions inutilisées présentes dans le repertoire "sessiondata" de mon serveur.
Si quelqu'un peut me confirmer ceci ?
En attendant merci
Alex01
Marsh Posté le 07-02-2002 à 09:23:32
up
Marsh Posté le 07-02-2002 à 13:29:13
reup
(pis evite de poser deux fois le meme question dans deux topics différents )
Marsh Posté le 06-02-2002 à 14:04:23
Bonjour à tous,
En ce moment je joue avec les sessions PHP.
Lorsque le serveur crait une session, il la place dans un répartoire spécifique "sessiondata". Lorsque je quitte le navigateur de ma station de travail, je m'attendais à ce que les sessions placées dans le repertoire "sessiondata" du serveur soient effacées, hors ce n'est pas le cas.
Pourquoi ?
Comment faire pour les effacer automatiquement ?
Merci d'avance !
Alex01