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

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

4 réponses

Répondre au sujet
kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 18 mars 2010 à 20:53
0
Utile
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
lectpe 163 Messages postés lundi 12 novembre 2007Date d'inscription 17 juillet 2010 Dernière intervention - 20 mars 2010 à 11:07
0
Utile
Salut.

Ouais je vais essayer cette méthode.

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