Déconnexion utilisateur fermeture navigateur (requête sql)

lectpe Messages postés 162 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 17 juillet 2010 - 18 mars 2010 à 20:04
jbalicrijoe Messages postés 2 Date d'inscription mardi 19 mai 2009 Statut Membre Dernière intervention 21 juillet 2016 - 20 juil. 2016 à 17:32
Bonjour à tous.

Je suis en-train de réaliser un site web sur lequel peuvent s'inscrire puis se connecter des utilisateurs.
Dans ma base de données, une variable vaut 1 lorsque l'utilisateur est connecté et 0 lorsqu'il ne l'est pas.
Lors de la connexion à un compte, le serveur regarde dans la base de données si cette variable est à 1 et ne permet de se connecter que si la variable et à 0 afin d'éviter que deux personnes soient connectées en même temps sur le même compte.

Je suis alors confronté à un gros problème beaucoup discuté et toujours sans réponse (sauf une très compliquée) :
J'ai un bouton de déconnexion qui permet de déconnecter l'utilisateur lorsqu'il clique dessus. Seulement, l'utilisateur ne clique pas toujours sur ce bouton en quittant le site : il peut tout simplement fermer le navigateur. Et cela doit le déconnecter dans la base de donnée (et mettre la "variable de connexion" à 0.

Il faudrait alors envoyer une requête SQL au serveur pour changer la valeur de cette variable, mais lorsque l'utilisateur a fermé son navigateur, le serveur ne peut plus effectuer de requêtes SQL.

J'ai vu sur un site que je pouvais utiliser l'exécution périodique d'un script php (http://matthieu.developpez.com/execution_periodique/) mais cela est relativement compliqué.

J'ai alors pensé à envoyer des requêtes SQL à chaque changement de page, mais cela est beaucoup trop "lourd" et trop lent sur un ordinateur dont la capacité de mémoire est assez faible et où la connexion à Internet et lente.

J'aimerais que vous me donniez votre avis sur cette dernière solution ainsi que sur l'exécution périodique d'un script PHP ou que vous m'en proposiez une autre si vous en avez une meilleure.

Bien cordialement.

Grégory.

3 réponses

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
18 mars 2010 à 20:53
Salut,

Il y a plusieurs façons de faire, dont un grand nombre sont inefficaces.
Tu cherches à savoir si l'utilisateur est toujours connecté, donc :
- un script AJAX qui envoie à intervalles réguliers (5 ... 60 sec) une requête au serveur
- ce dernier met à jour la table qui va bien

Le dernier "hit" de l'utilisateur est inférieur à x secondes => il est connecté
Le dernier "hit" de l'utilisateur est supérieur à x secondes => il n'est plus connecté

Simple non ?


Cordialement,


Kohntark -
0
lectpe Messages postés 162 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 17 juillet 2010 3
20 mars 2010 à 11:07
Salut.

Ouais je vais essayer cette méthode.

Merci
0
Tomswayne Messages postés 1 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 9 juillet 2010
9 juil. 2010 à 21:53
Salut lectpe,

en fait, j'avais le même problème que toi par rapport à ce 1--0 qui switch en fonction du fait qu'il soit en ligne ou pas. J'ai trouvé une parade assez sympa, et l'avantage c'est que c'est de l'instantané. C'est très simple en fait, il te faut la librairie jquery pour te faciliter l'ajax.Pas besoin d'envoyer des ping.

Le principe est simple:
tu dois créer deux fonctions javascript:
quand il se connecte:tu demandes avec une requete normale (UPDATE bidule SET online=1 WHERE pseudo=machin)
dans ton footer, tu met une fonction JS qui te fais le checkup avec un window.onunload(quand il quitte la page en cours)
----->requete ajax vers ton formulaire de traitement et tu le deconnecte dans ta BDD.

il y a là 2 solutions pour l'utilisateur:

1/ Soit il se rend sur une autre page de ton site et dans ce cas là tu fais appel à une fonction JS window.onload (au chargement)
----->requete ajax vers ton formulaire de traitement et tu le reconnecte dans ta BDD.

2/ Soit il se rend sur un autre site, ou ferme son navigateur ou quoi que ce soit et dans ce cas là, c'est pas grave, car dans ta base de données il a été déconnecté.

L'avantage est que c'est de l'instantané, donc ta requete va s'effectuer quoi qu'il arrive

Si tu as besoin de plus de détails au fonctionnement de cette formule, n'hésites pas à m'envoyer un message...

Tom
0
jbalicrijoe Messages postés 2 Date d'inscription mardi 19 mai 2009 Statut Membre Dernière intervention 21 juillet 2016
20 juil. 2016 à 17:32
je ne suis pas trés fort en javascript, je voudrai si c'est possible que si tu pouvais faire un script pour JS window.onload et un autre pour window.onunload. Merci par avance
0
Rejoignez-nous