PHP : Destruction propre de session

Désolé, j’ai fait une recherche sur le site, mais 1) les titres des topics ne parlaient pas de ce que je veux, 2) la flemme de lire tous les sujets étant donné que le site est très lent à cette heure.

Voilà, j’ai un petit soucis, mais alors très léger, concernant les sessions PHP. J’ai remarqué que, lors d’une création de session, un fichier (contenant les informations de session) est créé sur le serveur (pour easyphp : install_de_easyphp/tmp/). Or, lorsque l’utilisateur ne se déconnecte pas correctement (en cliquant sur le lien “se deconnecter”), ce fichier n’est pas supprimé. La session suivante ne reprendra pas ce fichier comme fichier de session, mais en créera un nouveau.

J’ai donc eu l’idée de stocker l’id de session dans la base de données. Lors d’une connexion d’un utilisateur, je récupère le numéro de session précédent (stockée dans la bd), je démarre une session (notons là s1) avec cet id et je la détruit. Puis j’en démarre une nouvelle (s2), avec un id généré aléatoirement par php. Les valeurs de sessions sont correctement sauvées. Enfin, je redirige vers mon index.php. Et là, patatra, il ne récupère pas les données de session! Pourtant le fichier de session est correctement créé sur le serveur, avec des valeurs dedans (j’ai regardé).

Lors de différent tests, je confirme que s2 est correctement créée, avec un id différent de id de s1. J’ai passe également le numéro de session dans l’url (je n’utilise pas encore les cookies). Je ne vois pas du tout où est le problème !!!

Petite précision : je me prend la tête, certe, mais la plupart des utilisateurs ne prennent pas le temps de cliquer sur le bouton de deconnection. Et donc les fichiers s’accumulent (jusqu’à remarqué ce soucis, j’en avais bien une 50aine).

Enfin, sans toute cette mascarade, le script marche impec.

je pense que tu es allé trop loin dans ta conception. tu n’as pas besoin de passer par tout ceci meme si l’utilisateur ne click pas sur deconnecter. autrement je sais pas a quoi servirait les sessions.
supposons que lorsq l’utilisateur se connecteur tu fais:


$_SESSION['id']=$id;

juste avant de faire appel a la page a laquelle l’utilisateur doit acceder test si cette valeur existe sinon la personne se connecte de nouveau:


if (isset($_SESSION['id']))
  //pas la peine d'ouvrir une autre session
  // appel de la page sur laquelle la personne doit aller 
  
else
    //se connecter donc ouvrir une session

Oui, donc je rajoutes que mon principe d’authentification marche impec sans aller chercher la session mal fermée avant (dans ce cas, une nouvelle session est créée, et basta). Or il se trouve, qu’avec ce principe (donc comme tu me le suggères), les fichiers de sessions stockés par le serveur se multiplie à une vitesse folle ! Et ne sont pas supprimés !

Mon but, ici, est d’arriver à supprimer la session précédente mal fermée par l’utilisateur lors de sa dernière connexion. Typiquement, ca se fait en fermant le naviguateur, sans passer par le fameux liens ‘se deconnecter’.

Qqun m’a suggéré de faire tourner un script sur le serveur pour supprimer ces fichiers à interval régulier. Or, ce n’est pas une bonne solution, puisque des sessions en cours d’utilisation pourront être fermées. L’utilisateur se retrouve déconnecté sans savoir pourquoi.

PHP les nettoie tout seul au bout d’un moment si je ne me trompe pas…

Comment il les nettoie ? Ce n’est pas un démon qui tourne derrière : comment sait-il que telle session n’est pas en cours d’utilisation ?

dans la configuration de PHP, tu as un timeout à partir duquel une session non mise à jour peut-être vu (coefficient de probabilité à rêgler dans la config aussi) par le "garbage collector", et être détruite :jap: …

c’est dans la section de configuration des sessions :oui:

Voilà voilà.
Et php, spa un démon c’est un ange, hé fada ! :smiley:

:jap:

cimer albert.
Comme quoi on en apprend tous les jours.