Aller au contenu

Sujets conseillés

Posté (modifié)

Bonjour,

Je souhaiterai calculer le temps durant lequel un membre était présent sur mon site.

Pour cela j'ai imaginé cette solution, qui est en fait la seule qui m'est venu à l'esprit :P

Je prend l'heure à laquelle la 1ere page s'affiche, puis à chaque fois que le membre navigue, on soustrait l'heure de l'ancienne page...

Le problème est de savoir comment faire au mieux...:

1) En utilisant uniquement des sessions : On insère le temps total de connexion dans la base de donnée lorsque le membre se déconnecte du site. Le problème est lorsque la personne quitte le site sans se déconnecter "proprement", il faudrait pouvoir détecter à quel moment elle ferme son navigateur. J'ai vu des codes javascript qui permettaient cela mais je ne suis pas certain que cela fonctionne à 100% et il faudrait obliger le membre à activer JS..?

2) En php : je mets à jour la durée de connexion en faisant un update dans la bdd à chaque rechargement de page.

3) En ajax avec la aussi une maj constante de la bdd.

J'ai vu sur le site sportingbet.com, une fois qu'on est identifié en tant que membre, on a un compteur qui s'affiche, qui indique le temps de connexion en temps réel...c'est avec javascript et peut etre ajax. Si on désactive javascript, la durée ne s'affiche plus, mais continue à être comptabiliser ! En effet si je réactive javascript, lorsque j'actualise, la durée indiquée prend en compte le temps ou JS était désactivé !

Le problème en mettant la bdd à jour à chaque rechargement est que je suppose que cela va être lourd pour le serveur au bout d'un moment non? (100 connectés qui envoient une requête update toutes les 10 sec ca peu aller, mais 5000...voir 10000 c'est autre chose)

Comment faire pour bien faire? Merci pour votre aide et vos suggestions :)

Bonne journée

Modifié par joboy84
Posté

Session, DateTime en PHP/asp ou que sais-je.

onclose en javascript/ajax s'il est activé. Rien de très sorcier, de toutes les manières tu ne pourras pas mieux faire.

il faudrait obliger le membre à activer JS

Sans lancer un troll, pour les rares personnes qui désactivent JS, pas de quoi s'affoler.

Si on désactive javascript, la durée ne s'affiche plus, mais continue à être comptabiliser ! En effet si je réactive javascript, lorsque j'actualise, la durée indiquée prend en compte le temps ou JS était désactivé !

Normal, puisque c'est la session serveur qui stocke la durée et non le JS.

Le problème en mettant la bdd à jour à chaque rechargement est que je suppose que cela va être lourd pour le serveur au bout d'un moment non? (100 connectés qui envoient une requête update toutes les 10 sec ca peu aller, mais 5000...voir 10000 c'est autre chose)

Pourquoi ne pas stocker des objets en session et n'insérer dans la base qu'une fois dans le onclose quitte à utiliser javascript. Une insertion par session ne paraît pas bien méchant.

Voilà pour un script classique que je juge pas franchement astucieux et portable.

Personnellement, j'enverrais une requête ajax HTTP sur une page vide dans le onclose, et j'utiliserais les logs apache : simple, rapide, efficace, tu n'aurais plus qu'à effectuer des traitements sur des logs existants et fiables.

=> pas de bdd, pas d'insertion, pas de prise de tête, tu le met en place en 1 minute chrono dès maintenant, et il ne te reste qu'à créer ton traitement des stats :) (pourquoi pas en partant d'un existant comme awstats).

PS : attention au onclose quand même, il peut avoir ouvert plusieurs pages de ton site : cela dit tu peux tout balancer comme ça et traiter dans les logs ;)

Posté

Merci pour vos nombreuses réponses...

En fait il ne s'agit pas que de récupérer le temps de connection...

Il faut :

- Récupérer la durée de connexion du membre mais :

=> vérifier qu'il a bien navigué pour lire le contenu et non par intérêt pur et simple

=> que s'il reste plus de x minutes sur une page, on ne comptabilise pas le temps en entier, mais max 1 min.

=> qu'il n'y a pas d'utilisation de robot du type autosurf (qui naviguerait sur le site à la place du membre pour créer du temps de connexion)

C'est pour une fidélisation des membres selon leur durée de connexion. En utilisant que les logs je ne pourrais pas faire tout cela simplement...Je pense donc utiliser les sessions pour stocker la durée et ajouter un onclose. Pour la détection des robots, faire un système de détection : Si le temps entre chaque page est identique, si la meme page a été visité 10 fois, si la souris n'a pas bougé...on considère que c'est un robot.

C'est la solution la plus simple à réaliser à mes yeux.

Posté

A part le mouvement de la souris (qui n'est pas très pertinent mais que tu peux gérer de la même manière), il faut quand même que tu m'expliques ce qui t'empêche de gérer ça avec des logs et ce que l'utilisation d'un sgbd t'apportera de plus... rien ou presque d'autant que les logs d'apache sont customisables.

qu'il n'y a pas d'utilisation de robot du type autosurf (qui naviguerait sur le site à la place du membre pour créer du temps de connexion)

Tu peux toujours créer des routines pour vérifier à partir d'un log, mais avoir du 100% fiable là dessus est de toutes manières utopique.

Posté (modifié)

A part le mouvement de la souris (qui n'est pas très pertinent mais que tu peux gérer de la même manière), il faut quand même que tu m'expliques ce qui t'empêche de gérer ça avec des logs et ce que l'utilisation d'un sgbd t'apportera de plus... rien ou presque d'autant que les logs d'apache sont customisables.

Tu peux toujours créer des routines pour vérifier à partir d'un log, mais avoir du 100% fiable là dessus est de toutes manières utopique.

Disons que je n'ai jamais travaillé avec les logs, en regardant ceux disponible il y a que l'ip qui permet d'identifier. Je suppose qu'on peut personnaliser comme tu le dis, mais pour le moment je n'ai pas trouver comment...en fait je ne pense pas que ce soit possible sur un mutualisé?

Pour parser les log et faire le nécessaire, ca je sais comment faire :)

Modifié par joboy84

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...