lectpe
Messages postés162Date d'inscriptionlundi 12 novembre 2007StatutMembreDernière intervention17 juillet 2010
-
18 mars 2010 à 20:04
jbalicrijoe
Messages postés2Date d'inscriptionmardi 19 mai 2009StatutMembreDernière intervention21 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 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.
kohntark
Messages postés3706Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention27 avril 201230 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é
Tomswayne
Messages postés1Date d'inscriptionjeudi 13 mai 2010StatutMembreDerniè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
jbalicrijoe
Messages postés2Date d'inscriptionmardi 19 mai 2009StatutMembreDernière intervention21 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