Maitriser la connexion d'un membre

WRInaute accro
Bonjour,

Ayant développé une application nécessitant la connexion par identifiants, j'ai mis à dispo un lien de déconnexion pour connaitre si un membre est connecté ou non sur le site mais mon problème majeur est si celui-ci clique sur la croix de son navigateur !

Connaissez-vous une astuce permettant de savoir si le membre quitte le site en cliquant sur la croix de son navigateur?

Merci de votre aide! :wink:
 
WRInaute accro
en fouillant les entrailles du web, il serait question de l'aide du JS (onUnLoad) pour pouvoir supprimer la session en cours et effectuer la mise à jour sur ma table connexion...

Mais il semblerait que des problèmes perdurent :
désactivation du JS, interprétation différentes sur les navigateurs, etc...

Prise de tête ! :evil:

inactivité au bout de x minutes....
oui c'est aussi en place mais cela n'empêche mon internaute de fermer via la croix et me laisser en plan... ou alors, je dois aussi faire une tache cron qui va tester les connexions supérieur à la date actuelle et les supprimer mais bonjour, les ressources utilisées pour ce truc.

Mais comme c'est pour un client qui tient à être le + proche possible de l'instant T, il donne à + ou - 3 min d'intervalle pour connaitre si internaute connecté ou non !
 
WRInaute impliqué
1-
Le meilleur moyen c'est à chaque chargement de page de vérifier en session la dernière fois qu'il a envoyé son status. Dès que tu dépasse 1min, tu envois une mise à jour dans ta BDD sur le champ "dernière activité" et avec un cron toutes les 3 min tu check tout.
Comme cela au pire tu as un UPDATE toutes les minutes par user + un cron toutes les 3min sur un critère super sélectif de date ... donc je pense pas que cela te pourrisse ton serveur ... où alors faut acheter plus gros.

2-
Tu peux sinon faire appel à des services externes qui font de même. La différence est que c'est eux qui stoque l'info. Toutes les 3min tu vas checker un lien qui te renvoi les nouveaux users en ligne et ceux qui viennent de partir.

Pour l'avoir utilisé sur un gros site, c'est pas super fiable ... il reste souvent des gens connecté 24h/24...

Je te conseille la façon manuelle ... malheureusement.

3-
En plus ton problème de js : si qqn quitte le processus du navigateur / reboot en hard son ordi > ça m'étonnerais que ton js dise qqch !!!


EDIT : lien pour le point 2 : "userplane" ... mais je déconseille.
 
WRInaute accro
ok merci de vos retours :)

Je vais mettre en place un cron à période de 3 min

mais mon prob se déplace car le membre qui peut être au tél, boire un verre, etc... bah... déconnexion auto !

C'est pas optimisé ! 8O
 
WRInaute passionné
screuscreu a dit:
1-
Le meilleur moyen c'est à chaque chargement de page de vérifier en session la dernière fois qu'il a envoyé son status. Dès que tu dépasse 1min, tu envois une mise à jour dans ta BDD sur le champ "dernière activité" et avec un cron toutes les 3 min tu check tout.
Comme cela au pire tu as un UPDATE toutes les minutes par user + un cron toutes les 3min sur un critère super sélectif de date ... donc je pense pas que cela te pourrisse ton serveur ... où alors faut acheter plus gros.

j'ai pas trop compris cette solution ...

pour rebondir sur le sujet j'ai un souci proche sur une webapplication, je voudrais interdire les accès concurrents : quand dupond ouvre une fiche client, alors je voudrais interdire a michel d'accéder à la même fiche, ou plutôt lui interdire de modifier cette fiche

comment savoir quand une fiche est ouverte chez quelqu'un, en prenant en compte, les fiches qu'on oublie de fermer à la fermeture de session automatique au bout de 30 min, en prenant en compte aussi les fermetures de navigateur
 
WRInaute impliqué
Je vais tenter de clarifier.

:arrow: Principe de base :
A chaque chargement de page de l'utilisateur 3 (son id), on fait un :
Code:
UPDATE users SET last_coucou = NOW(), online = 1 WHERE id = 3

Toutes les 3 min on fait ça par un script Cron
Code:
UPDATE users SET online = 0 WHERE last_coucou < NOW() -3min


:arrow: Optimisation
Pour éviter d'accéder à la base à chaque chargement de page ... ce qui peut être toutes les 10s si l'utilisateur cherche de l'info, on met en place un system de Session (ou Cookie au choix)
A chaque chargement de page :
Code:
if (Session.last_coucou == null ||Session.last_coucou < NOW()-1min ){
    UPDATE users SET last_coucou = NOW(), online = 1 WHERE id = 3
    Session.last_coucou  = NOW()
}else{
    //RIEN
}
Ce qui fait que l'on met à jour la BDD que toutes les 1min au max ... gain énorme pour des cliqueurs fous

Pareil pour le CRON


J'espère avoir été plus clair
 
WRInaute accro
ok merci d'être explicite dans tes explications mais en faite, le site en question est un chat webcam donc les connexions peuvent être longues.

Biensur tant que le user se manifeste, y'a pas de prob !

Mais il peut très bien vouloir rester connecté sans bouger et là, c'est le prob de mise à jour à 3 min !!
 
WRInaute passionné
ok mais ce n'est pas vraiment exact, car si mon conseiller reste 10 minutes en lignes avec le client, il faut faire le cron toutes les 10 minutes, c'est aps hyper hyper précis.

mais ça peut aider

merci du tuyau
 
WRInaute impliqué
Tu as aucune interaction avec l'interface avec ton chat ?
tu peux pas envoyer une petite requête ajax comme si de rien n'était pendant qu'il fait des trucs de chat ?
 
WRInaute accro
en faite, le chat va être en flash et j'ai cru comprendre que via flash, tu pouvais justement préciser quand ton user ferme la fenêtre de l'application.

mais ensuite, pour reprendre l'architecture HTML, je reprendrais mon traitement via cron et script php intégré dans les pages internes.

Je crois que là, je devrais être carré :)
 
Discussions similaires
Haut