[question] Les Sessions oui mais....

Les Sessions oui mais.... [question] - PHP - Programmation

Marsh Posté le 28-03-2006 à 13:58:27    

Hello tout le monde.
 
Alors voila après avoir galerer pas mal avec les cookies entre IE et Firefox on ma conseiller (ici) de passer a un systeme de sessions. Chose que j'ai fait avec enregistrement dans la BDD. De plus j'ai mis un systeme de gestion de la session en disant que si le time() est supérieur a X seconde (900 pour 15 minutes) alors ont fait un Delete de l'enregistrement dans la BDD et un session destroy.
 
Tout fonctionne bien il demande de ce réidentifier au bout de x seconde d'inactivité. Seulement en cas de fermeture du navigateur comment le DELETE FROM et SESSION DESTROY ne sera pas réalisé puisque l'internaute n'aura pas cliquer sur un lien du site.
 
Y a t'il un moyen coté serveur en plus afin de supprimer l'enregistrement de la BDD après X secondes ????
 
JE sais c'est une question qui revient souvent et c'est pourquoi j'ai appliqué ce system de destruction de session mais bon la je suis un peu coincé quand meme il doit bien y avoir un moyen
 
MErci d'avance

Reply

Marsh Posté le 28-03-2006 à 13:58:27   

Reply

Marsh Posté le 28-03-2006 à 14:10:38    

si l'internaute ferme son navigateur, tu n'en sauras effectivement rien.
 
Mais je ne comprends pas trop ton problème, puisque tu te bases sur le temps d'inactivité, et non sur un lien pour détruire ta session.
 
Mais au cas où j'aurai bien compris la question : dans ta base, tu stockes le timestamp de dernière activité de ton utiisateur (comme tu le fais déjà). Quand tu rajoutes ou détruit une session, tu détruis en prime toutes les sessions qui ont un temps de dernière activité trop ancien (et pas seulement celle de l'utilisateur qui a fait appelé la page).

Reply

Marsh Posté le 28-03-2006 à 15:23:19    

Oui en autre cela pourrait resoudre le problème. Mais cela reste un peu barbare non?
 
En fait c'est peut ete moi qui à mal fait le truc. J'ai crer un fichier PHP que j'ai appeler func_controle_session
dedans j'ai dit si la session existe alors on recupére le time enregistrer dans la table session (lors de la connection)  
si le time est supérier a time limite (time limite time derniere time actuel + seconde) alors on detruit la session et on detruit l'enregistrement en bdd.
Si le time est inférieur au time limite alors on met à jour la valeur du time en bdd.
 
Donc forcement pour que ce bout de code soit executer il faut que l'internaute clique sur une page.
Donc forcement si il en clique pas et qu'il ferme son navigateur je suis un peu couillonné.
De plus c'est une petit site, un site de petite envergure  en gros afin de mettre en pratique ce que je connais (je m'autoforme quoi) et donc il n'y aura pas grand monde dessus car il me servira juste moi , famille et amis donc vraiment pas grand chose quoi
 
donc il pourra se passer 2 , 3 jour , une semaine peut être avant quelqu'un d'autre se connecte.
 
N'y à t'il pas un moyen coté serveur de le faire?
 
J'avais penser plus a une tache planifier  qui se lancerai a intervalle regulier et qui detruirai les session obsolete. Mais je sais pas comment faire cela  
non pas créer la tache planifier mais je lancerai quoi?
 
Enfin peut etre que je m'y suis mal prit depuis le debut

Reply

Marsh Posté le 28-03-2006 à 16:26:14    

Donc ton système est très bien, tu dois juste rajouter un truc (même deux d'après tes besoins)
 
- tu rajoutes du code dans ta fonction func_controle_session, qui aura pour but de détruire toute session inactive depuis x temps. Non ce n'est pas barbare, c'est fait partout comme ça.
 
- Pour la tache planifiée,  tu fais juste une page PHP qui fait le ménage des sessions trop vieilles. Ensuite tu lances une tache planifiée qui lance ton navigateur internet sur cette page.


Message édité par Djebel1 le 28-03-2006 à 16:32:56
Reply

Marsh Posté le 28-03-2006 à 17:12:23    

hyptnos a écrit :


JE sais c'est une question qui revient souvent et c'est pourquoi j'ai appliqué ce system de destruction de session mais bon la je suis un peu coincé quand meme il doit bien y avoir un moyen


 
Il suffit de placer ton delete de session dans le garbage collecting defini par la fonction session_set_save_handler()

Message cité 1 fois
Message édité par smaragdus le 28-03-2006 à 17:36:25
Reply

Marsh Posté le 28-03-2006 à 17:37:26    

smaragdus a écrit :

Il suffit de placer ton delete de session dans le garbage collecting defini par la fonction session_set_save_handler()


 
 
OU la c'est nouveau pour moi ca
peux tu etres plus explicite s'il te plait
 
Ou je trouve cela et comment je met en place ?
 
Merci d'avance

Reply

Marsh Posté le 28-03-2006 à 17:39:15    

hyptnos a écrit :

OU la c'est nouveau pour moi ca
peux tu etres plus explicite s'il te plait
 
Ou je trouve cela et comment je met en place ?
 
Merci d'avance


 
Cette fonction sert à remplacer les mecanismes de sauvegarde de session comme tu viens de le faire. Tu l'as forcement utilisé.


Message édité par smaragdus le 28-03-2006 à 18:01:41
Reply

Marsh Posté le 28-03-2006 à 18:06:10    

non, a mon avis il stock juste l'ID de session dans sa base, je pense pas qu'il ait utilisé session_set_save_handler()

Reply

Marsh Posté le 28-03-2006 à 18:18:26    

cela reste tres obscure
Vais chercher sur le net ce que peux trouver sur le sujet
 
edit : Oui oui je stock en bdd juste l'id de session comme le dis Djebel1


Message édité par hyptnos le 28-03-2006 à 18:19:45
Reply

Marsh Posté le 28-03-2006 à 18:47:50    

A quoi te sert de stocker l'ID de session dans la DB ? La durée de vie des sessions est parametrable.

Reply

Marsh Posté le 28-03-2006 à 18:47:50   

Reply

Marsh Posté le 28-03-2006 à 18:52:12    

BAs je ne le savais pas mais cela me permet justement de pouvoir estimé le nombre de personne connecter simultanément et ainsi limité l'accès de cette manière
 
Car je ne sais pas comment fonctionne l'autre facon desolé c'est ca d'etre un newbie on fait pas toujours comme il le faudrait

Reply

Sujets relatifs:

Leave a Replay

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