Fermeture navigateur

Eléphanteau du PHP | 20 Messages

21 mai 2008, 15:17

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]

Mammouth du PHP | 514 Messages

21 mai 2008, 15:29

Il faut lancer une popup, qui met à jour ta table, et qui se ferme automatiquement.

Eléphanteau du PHP | 20 Messages

21 mai 2008, 15:33

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]

Eléphant du PHP | 175 Messages

21 mai 2008, 15:36

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...

Eléphanteau du PHP | 20 Messages

21 mai 2008, 15:43

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]

Eléphant du PHP | 175 Messages

21 mai 2008, 15:52

en http tu ne pourra pas faire mieux, on est en mode deconnecté...

Eléphanteau du PHP | 20 Messages

21 mai 2008, 15:58

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]

Eléphant du PHP | 175 Messages

21 mai 2008, 15:59

Pour l'avoir deja implementé, ca marche nickel...

mais bon courage a toi.

Eléphanteau du PHP | 20 Messages

21 mai 2008, 16:01

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]

Eléphant du PHP | 175 Messages

21 mai 2008, 16:50

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...

Eléphanteau du PHP | 20 Messages

22 mai 2008, 09:50

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]

Eléphant du PHP | 175 Messages

22 mai 2008, 16:20

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?

Eléphanteau du PHP | 20 Messages

23 mai 2008, 10:31

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.

Eléphant du PHP | 175 Messages

23 mai 2008, 10:42

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?

Eléphanteau du PHP | 20 Messages

23 mai 2008, 11:26

le champs enum 'online' 1=online et 0 offline