Page 1 sur 2

Fermeture navigateur

Posté : 21 mai 2008, 15:17
par Tomsawyer
Bonjour,

J'aimerai detecter la fermeture du navigateur par un utilisateur.

j'explique: sur mon site il existe un bouton de logout qui détruit la session et qui met a jour la table user et son champ onLine...
jusqu'ici pas de problème.
toute fois lorsque l'utilisateur quitte le site en fermant le navigateur la session est bien détruite mais la table n'a pas pu se mettre a jour. (l'utilisateur est toujour en statut "connecté" dans la table.)

Etant coté Client j'ai écris une petite fonction java script ConfirmMessage() avec l'attribue onUnload dans le body... et là j'ai un autre souci car a chaque fois que j'actualise ma page ou que je navigue dans le site. la fenêtre d'alerte apparait.

ya t-il une solution pour faire en sorte que ma table soit mise a jour si l'utilisateur ne clik pas sur logOut et quitte le navigateur.

voici le code.

Code : Tout sélectionner

<html> <head> <SCRIPT language=javascript> function ConfirmMessage() { if (confirm("Etes-vous sur de vouloir quitter le site?")) { // Clic sur OK window.location.replace("http://site.com/fichier-de-mise-a-jour.php"); } } </SCRIPT> </head> <body [b]onUnload[/b]="ConfirmMessage()";> </body> </html>
[/code]

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 21 mai 2008, 15:29
par mcorgnet
Il faut lancer une popup, qui met à jour ta table, et qui se ferme automatiquement.

Posté : 21 mai 2008, 15:33
par Tomsawyer
merci mais cette solution 'nest pas envisageable pour 2 raisons:
la 1er c'est que certains navigateurs bloquent les pop up.
la 2eme c'est que si j'actualise avec le onUnload ma page la popup apparaitra qu'en même.

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 21 mai 2008, 15:36
par steph29
fait le contraire...
update un champ dans ta table quand l'utilisateur est sur ton site (sur chaque page),
apres un certain laps de temps de vie de ce champs tu detruit les sessions et tu ne le compte pas dans les connectes...

Posté : 21 mai 2008, 15:43
par Tomsawyer
c'est une bonne idée.. mais il reste un problème...
si il quitte le navigateur avant que que te Timer arriver à son terme...
il sera toujours connecté...

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 21 mai 2008, 15:52
par steph29
en http tu ne pourra pas faire mieux, on est en mode deconnecté...

Posté : 21 mai 2008, 15:58
par Tomsawyer
Peut-etre que oui :) mais peut etre que non :lol:
si quelqu'un a une solution ...

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 21 mai 2008, 15:59
par steph29
Pour l'avoir deja implementé, ca marche nickel...

mais bon courage a toi.

Posté : 21 mai 2008, 16:01
par Tomsawyer
Merci steph29
si tu me dis que ça marche nickel je veut bien essayer.

t'as un exemple de code?

merci

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 21 mai 2008, 16:50
par steph29
Je l'ai deja fait mais j'ai pas ca sous la main et ca ne serait pas t'aider que de tout pondre :twisted:
mais de memoire ca donnais un truc du genre:

dans ta base tu stocke dans une table:

l'id de session,la date de connection, la date de derniere action, un statut de connexion (oui/non), id_utilisateur si tu as

tu update la date de derniere action a chaque page et chaque action
$requete="UPDATE ta_table SET date_last_action='".date("U")."', statut='1'  WHERE id_session='".$id_session_courant."'";
tu as la liste des connectes en listant les statut a 1

ensuite en crontab, tu fais le menage des deconnectes :
$heure_max = date("U") - 400; //en secondes
$requete="UPDATE FROM ta_table SET statut='0' WHERE `date_last_action`<'".$heure_max."'";
et par la suite du peux faire le menage dans les sessions en jouant sur la date de connection...

Posté : 22 mai 2008, 09:50
par Tomsawyer
merci steph29
ça c la partie php -- pas de souci .
Mais a quelle moment intervient la partie déconnexion.
c'est ce qui m'intéresse.. coté client... quelle méthode utiliser?
Meci d'avance steph

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 22 mai 2008, 16:20
par steph29
Je vais te repondre par des questions:

qu'entend tu par deconnexion?
quel traitement veux tu faire lors de la deconnexion?
Que fais ton script fichier-de-mise-a-jour.php?

Posté : 23 mai 2008, 10:31
par Tomsawyer
qu'entend tu par déconnexion?

Moment ou on considère que l'utilisateur n'interagit plus sur la page.


quel traitement veux tu faire lors de la déconnexion?

Mise à jour de la table user.

Que fais ton script fichier-de-mise-a-jour.php?

Mise à jour de la table user et destruction de la session.

Posté : 23 mai 2008, 10:42
par steph29
qu'entend tu par déconnexion?
Moment ou on considère que l'utilisateur n'interagit plus sur la page.
=> répérés quand statut=0
quel traitement veux tu faire lors de la déconnexion?
Mise à jour de la table user.
=> tu peux effectuer tes traitement dans la crontab apres le menage
Que fais ton script fichier-de-mise-a-jour.php?
Mise à jour de la table user et destruction de la session.
=> avant l'update de la date de derniere action, tu teste si le statut est a 0 et dans ce cas du kill la session...

qu'update tu dans ta table user?

Posté : 23 mai 2008, 11:26
par Tomsawyer
le champs enum 'online' 1=online et 0 offline