|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() jean Inscription : octobre 2011 Messages : 95 ![]() |
Bonjour, je réfléchissais à un code pour déconnecter toute personne au bout d'un certain temps, 15mn par exemple.
Je voudrais que toutes ses données soient supprimées. Je me suis renseigné, et voici le code : Code :
|
||
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 727 ![]() |
Salut
Fais un essai avec ceci pour voir : Code :
Théoriquement toujours, il faut que le "gc_maxlifetime" et le "cookie_lifetime" soit synchro pour que ça fonctionne sans devoir redéfinir sans cesse le cookie avec session_set_cookie_params. Il faut aussi bien définir le "cookie_path" et le "cookie_domain", sinon il risque d'avoir des problèmes. Cependant, il faut savoir que le fichier de session n'est pas physiquement supprimé, c'est juste sa date qui est périmée. C'est le "ramasse miette" (GC -> Garbage Collector) qui se charge de le détruire selon une certaine probabilité.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
||
|
|
00
|
|
|
#3 | ||||||
|
Membre Expert
![]() Développeur informatique Inscription : août 2005 Messages : 1 179 ![]() |
Bonjour,
J'utilise pratiquement la même méthode : Code :
Code :
Code :
__________________
http://cdemarche.developpez.com/ Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
|
||||||
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 727 ![]() |
@ska_root
Ne peut on pas considérer qu'en procédant ainsi (de mettre une heure de référence dans sa session) on ne ferait que refaire ce que la gestion des session/cookie propose déjà ? Ou alors, ne peut pas voir cela comme un moyen détourné par rapport à ce qui existe à ce niveau ? En tout cas, si le délai qu'on met dans la session à une valeur inférieur à celle défini dans le gc_maxlifetime (1440s, soit 24 minutes par défaut), ça fonctionnera. Mais si on met un délai plus grand, à mon avis ça ne devrait pas fonctionner, une nouvelle session sera créé si ça dépasse 24 minutes. Du moins il me semble. Php le propose déjà, c'est la date de création ou de modification et un temps de référence qui est défini dans le gc_maxlifetime. Donc quelque part l'information on l'a déjà. Donc normalement 2 choses une : - Soit on modifie les config que propose Php à ce niveau pour qu'une nouvelle session soit créé si la date est expirée (gc_maxlifetime et cookie_lifetime). - Soit avant de démarrer la session (avant session_start) on parcourt chaque fichier de session, on récupère la date de dernière mise à jour du fichier de session correspondant (grâce au cookie), et si la date est expirée, alors on supprime le fichier, puis on lance la session (session_start). Une nouvelle session devrait être créé. Ceci dit, pourquoi pas.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() jean Inscription : octobre 2011 Messages : 95 ![]() |
Bonjour,
à RunCodePhp sur ton exemple, à l'exécution de ton code, j'ai session_id() qui génère un identifiant à chaque rafraîchissement de la page. Ne devait-il pas le faire au bout d'une minute? à ska_root, merci pour ton exemple, c'est intéressant. à RunCodePhp pour son second message, je pense aussi que Php gère déjà tout ça, mais si je modifie gc_maxlifetime dans le .ini, toutes mes applications seront soumises à ça. Est ce que le fait d'utiliser Code :
ini_set('session.gc_maxlifetime', 900); Sinon pour ton dernier point, il est intéressant, mais va-t-on chercher ce dernier fichier dans le dossier des fichiers temporaires, des cookies? Est ce que le traitement à faire ne serait pas trop lourd? Merci |
|
|
00
|
|
|
#6 | |||||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 727 ![]() |
Citation:
Si ça ne fonctionnementpas, alors il doit avoir un souci au niveau du path ou du domaine coté cookie. Les as tu correctement bien défini ? (de mon coté j'avais fais un essai juste avant, histoire de me remémoré, et ça fonctionne). As tu essayé en faisant ça du plus basique possible (histoire de ne pas être perturbé par d'autres codes). Citation:
Code :
L'un est plus destiné coté serveur, l'autre coté client (session/cookie), ça marche de pair. Et il faut que le temps soit le même aussi. Citation:
Suffit de le définir dans session.save_path. Si tu prends cette voie là, regarde la doc sur la gestion personnalisée des sessions : session_set_save_handler(). A savoir qu'on peu aussi gérer les session dans une Bdd au lieu dans des fichiers (par défaut).
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|||||
|
|
00
|
|
|
#7 | ||
|
Membre du Club
![]() jean Inscription : octobre 2011 Messages : 95 ![]() |
Non je ne les avais pas bien redéfinis désolé.
Dans le php.ini ils disent ceci : Code :
Est ce qu'on doit nous même tout supprimer par un script? |
||
|
|
00
|
|
|
#8 | |
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 727 ![]() |
Citation:
Ceci dit, on peu redéfinir ces probabilités afin de le faire déclencher plus ou moins souvent. Dans le php.ini : session.gc_probability et session.gc_divisor Cependant faut pas se tromper, au risque à ce que les fichiers ne soient pas supprimés (prudence quoi). Code :
je ne comprends pas la dernière ligne cd /path...
Puis /path/to/sessions c'est pour exemple, c'est à dire : chemin/vers/le/repertoire/de/session C'est juste des explications pour exemple. C'est à toi de créer ce répertoire, est d'indiquer le chemin où il se trouve sur le disque (session.save_path).
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|
|
|
00
|
|
|
#9 | |
|
Membre Expert
![]() Développeur informatique Inscription : août 2005 Messages : 1 179 ![]() |
Désolé d'arriver un peu tard dans le thread...
Citation:
La configuration par défaut de php stocke les fichiers de session dans le répertoire /tmp, celui-ci peut subir des règles d'effacement définit par l'OS qui les héberge. C'est pourquoi j'ajouterais qu'il faut définir session.save_path en plus de session.gc_maxlifetime et session.cookie_lifetime En ce qui concerne le garbage collector, il est effectivement enclenché suivant une probabilité définit par la règle session.gc_probability (1 par défaut) divisée par session.gc_divisor (100 par défaut). Donc en fait, ce n'est pas qu'il ne fonctionne pas, mais si on conserve ces valeurs par défaut, il ne se déclenchera qu'avec une probabilité de 1%. On peut donc jouer avec les valeurs par défaut mais d'après ce que je comprends, cela coutera aussi plus cher en terme de processus car lorsqu'il se déclenche il doit vérifier la validité de toutes les sessions enregistrées. Code :
cd /path/to/sessions; find -cmin +24 | xargs rm find => cherche tous les fichiers de manière récursive dans le répertoire courant l'option -cmin +24 => filtre les fichiers non modifiés depuis 24 minutes le "|" indique qu'on donne la liste des fichiers obtenus a la commande suivante xargs => itère les résultat est les donne en arguments a la commande suivante rm => supprime le fichier voila pour la petite histoire...
__________________
http://cdemarche.developpez.com/ Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
|
|
|
|
00
|
|
|
#10 |
|
Membre du Club
![]() jean Inscription : octobre 2011 Messages : 95 ![]() |
Je vous remercie.
la dernière ligne, c'était surtout pour l'exemple que pour les commandes cd ou find, mais merci. bonne journée |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com