par
Nonoteam » 23 juil. 2008, 17:40
Bonjour,
Pour gérer un espace membre, je crée, à la connexion d'un utilisateur, un fichier de session contenant diverses variables.
A chaque page je régénère l'identifiant de session à l'aide de session_regenerate_id();
En effectuant session_regenerate_id(true), l'identifiant de la session en cours est immédiatement changé, aucun nouveau fichier n'est créé.
D'autre part, une variable de session et un cookie contiennent une chaîne aléatoire, je vérifie que les deux sont identiques pour continuer.
C'est donc là que le problème des accès concurrents se pose, lorsqu'une douzaine de pages sont chargées simultanément, la valeur du cookie et celle de la variable de session diffèrent à un moment et la session est instantanément détruite.
Le problème est réglé en passant l'argument de la fonction à 'false' : session_regenerate_id(false);
De la sorte, un nouveau fichier de session est créé avec un nouvel identifiant, l'ancien n'est pas supprimé.
Au cours de la visite du site, on a donc plusieurs fichiers de sessions qui se créent à chaque demande d'une page, ce qui augmente la probabilité de trouver une session valide et de la voler. D'autant plus qu'a la déconnexion, seule la dernière session en cours est supprimée.
J'aimerais donc pouvoir supprimer les anciens fichiers de sessions au bout d'un certain laps de temps afin de pouvoir gérer les accès concurrents à plusieurs pages.
Comment ainsi supprimer un ancien fichier session automatiquement ?
J'ai pensé à la fonction unlink(), je pourrais enregistrer l'identifiant ainsi que sa durée de vie de l'ancien fichier de session dans le nouveau. En testant si sa durée de vie est dépassée, je supprimerais l'ancien fichier.
Cependant, je ne sais pas s'il est possible de supprimer un fichier protégé par .htaccess, non plus si la suppression est propre.
De plus si une page n'est pas chargée, il peut rester en vie encore un long moment.
Est ce qu'il y aurait une solution automatique ? Peut être en définissant la durée de vie avec session_set_cookie_params($lifetime) du cookie de session en cours juste avant de régénérer l'identifiant ?
Le fichier n'est pas supprimé pour autant et l 'ancienne session semble encore valide.
Comment y remédier ?
D'avance merci.
Bonjour,
Pour gérer un espace membre, je crée, à la connexion d'un utilisateur, un fichier de session contenant diverses variables.
A chaque page je régénère l'identifiant de session à l'aide de [color=blue]session_regenerate_id()[/color];
En effectuant [color=blue]session_regenerate_id(true)[/color], l'identifiant de la session en cours est immédiatement changé, aucun nouveau fichier n'est créé.
D'autre part, une variable de session et un cookie contiennent une chaîne aléatoire, je vérifie que les deux sont identiques pour continuer.
C'est donc là que le problème des accès concurrents se pose, lorsqu'une douzaine de pages sont chargées simultanément, la valeur du cookie et celle de la variable de session diffèrent à un moment et la session est instantanément détruite.
Le problème est réglé en passant l'argument de la fonction à 'false' : [color=blue]session_regenerate_id(false);[/color]
De la sorte, un nouveau fichier de session est créé avec un nouvel identifiant, l'ancien n'est pas supprimé.
Au cours de la visite du site, on a donc plusieurs fichiers de sessions qui se créent à chaque demande d'une page, ce qui augmente la probabilité de trouver une session valide et de la voler. D'autant plus qu'a la déconnexion, seule la dernière session en cours est supprimée.
J'aimerais donc pouvoir supprimer les anciens fichiers de sessions au bout d'un certain laps de temps afin de pouvoir gérer les accès concurrents à plusieurs pages.
Comment ainsi supprimer un ancien fichier session automatiquement ?
J'ai pensé à la fonction [color=blue]unlink()[/color], je pourrais enregistrer l'identifiant ainsi que sa durée de vie de l'ancien fichier de session dans le nouveau. En testant si sa durée de vie est dépassée, je supprimerais l'ancien fichier.
Cependant, je ne sais pas s'il est possible de supprimer un fichier protégé par .htaccess, non plus si la suppression est propre.
De plus si une page n'est pas chargée, il peut rester en vie encore un long moment.
Est ce qu'il y aurait une solution automatique ? Peut être en définissant la durée de vie avec [color=blue]session_set_cookie_params($lifetime)[/color] du cookie de session en cours juste avant de régénérer l'identifiant ?
Le fichier n'est pas supprimé pour autant et l 'ancienne session semble encore valide.
Comment y remédier ?
D'avance merci.