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

Messages postés
163
Date d'inscription
lundi 12 novembre 2007
Dernière intervention
17 juillet 2010
- 18 mars 2010 à 20:04 - Dernière réponse :
Messages postés
2
Date d'inscription
mardi 19 mai 2009
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.
Afficher la suite 

Votre réponse

4 réponses

Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Dernière intervention
27 avril 2012
- 18 mars 2010 à 20:53
0
Merci
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 -
Commenter la réponse de kohntark
Messages postés
163
Date d'inscription
lundi 12 novembre 2007
Dernière intervention
17 juillet 2010
- 20 mars 2010 à 11:07
0
Merci
Salut.

Ouais je vais essayer cette méthode.

Merci
Commenter la réponse de lectpe
Messages postés
1
Date d'inscription
jeudi 13 mai 2010
Dernière intervention
9 juillet 2010
- 9 juil. 2010 à 21:53
0
Merci
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
Messages postés
2
Date d'inscription
mardi 19 mai 2009
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
Commenter la réponse de Tomswayne

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.