SIte web: déterminer le temps de visite

Bonsoir,

A des fins de statistiques sur l’intranet de l’entreprise j aimerais intégrer le nb de connexion pour chaque IP et également le temps passe sur l’intranet toujours par utilisateur.

Le nombre de connexion c est pas complique, on prend la page index, si c est l’utilisateur x qui se connecte, on prend son fichier et on ajoute 1, pour l’utilisateur Y pareil.

Par contre je bloque un peu pour le temps de connexion. Les utilisateurs ont sait quand ils arrivent mais pas qd il partent! car je n’ai aucun bouton “deconnexion” qui existe…donc ils utilisent la croix de fermeture de fenetre de IE.

A votre avis comment faire? il ya des scripts qui existent pour realiser ca?

merci

je pense que oui, puisque certains hebergeurs fournissent des outils de statistiques avec l’hébergement (comme awstat par ex). Et dedans, ils précisent le temps de connexion à 30 secondes près. Donc on peut supposer que oui, ça existe :slight_smile:

Je peux pas t’aider plus :lol:

Si c’est à 30 secondes près, le clacul doit peut etre s’appuyer sur un temps estimé pour lire la page.

Si la personne ouvre seulement un lien, tu enregistres sa date d’arrivée et tu estimes qu’elle est restée 30 secondes.
Si elle clique sur un autre lien sur ta page, tu retiens la date de ce clic, tu peux calculer le temps par rapport à la date d’arrivée, et tu rajoutes 30 secondes pour la lecture de la page en cours.

Et ainsi de suite. :neutre:

le pb c que c est un intranet de gestion (liste client, gestion stock…) c est donc bcp plus aleatoire que 30s…

Cela doit se faire par cookie tracking ton truc, non? Ou javascript et la fonction unonload.

Vu que tu connaît l’utilisateur, c’est qu’il doit y avoir une session. le problème, c’est que la session ne se termine jamais, mais il doit y avoir un time-out pour terminer automatiquement la session.
soit tu peut prendre la main sur ce time-out et tu détermine le temps de session par la date/heure du dernier appel - la date/heure du premier appel (pour ne pas prendre en compte justement la durée du time-out). Tu stocke date début date fin dans la session.

Soit en mode "bourrin" tu considère chaque appel comme le dernier appel et à chaque appel tu écrase (en base de données par exemple) une date de fin liée à un N° session/utilisateur(en en écrivant la date de début au login) la valeur ne sera fausse que pour les sessions en cours et correspondra à la durée "en cours".

:slight_smile:

+1, après tu peux utiliser 5 minutes au lieu de 30 secondes, si tu ne veux pas un résultat à la seconde près.

Autrement, si c’est vraiment, vraiment important, tu peux inclure un “heartbeat” dans chaque page, un petit JavaScript qui enverra une requête bidon vers le serveur toutes les minutes par exemple… tant que l’utilisateur a la page d’ouverte, ça comptabilise le temps, et s’il ferme la fenêtre, plus aucune requête ne sera envoyée, donc tu auras le temps de visite avec une marge d’erreur d’une minute maximum. :slight_smile:

le problème c est q un utilisateur peut visiter plusieurs pages mais facon tres rapide et puis tout fermer, mais le meme utilisateur peut par exemple rester 15min si il recherche un certain nombre de client

je suis pas a 5min pres, mais multiplié par le nombre deconnxion je risque d 'avoir de tres grandes erreurs

je n utilise pas de sessions…je sais qui est qui uniquement par l’adresse IP du client (adresse IP reservée)

ca peut etre sympa…tu as des codes comme exemple? es ce que ca demande bcp de ressources? l’ideal c est que je fasse genre toutes les 2min voire 3min

on dirait oui que ca peut marcher:


<body bgcolor="#CCFFCC" link="#FF0066" onUnload="exitcnsl()"> 

avec fonction exitcnsl() :


<script language="Javascript">
<!--
var exit=true;
function exitcnsl()
{
if (exit)
<?php include 'code_a_excuter_a_la_sortie_de_la_page.php';?>
}
//-->
</script> 

Le principe de onunload est de détecter un appui sur le croix du navigateur non?

après test complémentaire le onunload pose un serieux problème

ce que j ai fait, c est que je lai mis dans le body (normal je dirais) puis dans le head j ai integrer l’ouvverture d une popup qui execute le script php que je veux

le soucis c est que l’ayant mis ce code sur toute les pages de mon site (logique je dirais) ben des que je vais sur un lien interne au site (je change de page) ca m affiche le popup!

y a t il moyen d eviter ca?

merci

la solution à Lamtd me semble la meilleure.

Autre problème que tu risques de recontrer avec OnUnload, c’est que je crois qu’il n’est pas implémenté dans tous les navigateurs (Opéra notamment).

Autrement, pour le heartbeat, pour faire ça simplement il suffit de rajouter sur chaque page, un truc du genre :

<iframe src="heartbeat.php"></iframe>

Ensuite, dans ton fichier heartbeat.php, t’as juste à mettre un truc comme ça :

<html?gt;
<head>
<META HTTP-EQUIV=Refresh CONTENT="60; URL=heartbeat.php">
<META HTTP-EQUIV="pragma" CONTENT="nocache">
</head>
</html?gt;

<?
  mise_a_jour_de_la_base_de_donnees();
?>

Ce qui aura pour effet d’appeller la fonction mise_a_jour_de_la_base_de_donnees() toutes les 60 secondes… après à toi de gérer ça comme tu veux. :wink:

Yes. Ne t’étonne pas si ta base a mal après.

(une mise à jour toute les 60s pour traquer un utilisateur, hé bé)

Oui, après c’est à régler en fonction de la puissance du serveur et du nombre d’utilisateurs… :jap:

Mais niveau performance je ne vois pas de soucis particulier, ce n’est pas vraiment ce qui va plomber un serveur web, si y’a déjà des scripts PHP qui tournent dessus.

Les scripts de chat en php sont parmi les pires.

Bon, ceci dit mySQL ne gère pas trop les transactions, donc ça passe…

Bon je donne ma petite idée, mais bon je pense pas être le plus qualifié :smiley:

Création d’un cookie à l’arrivée de l’utilisateur : heure arrivée
Création d’un cookie de session, qui sert à l’identifier.

A chaque chargement de page : est ce qu’on a un cookie de session ?

Si oui, on prend le cookie d’heure d’arrivée, et on met à jour la base de données avec la nouvelle différence (time() - heure d’arrivée). Mais bon tu vas tuer ton serveur avec ce genre de trucs de toute manière :smiley:

Le plus simple : les logs apache du serveur, et analyse via un outil dédié ^^

L’un dans l’autre, une page web étant globalement statique une fois qu’elle est générée, on ne sait jamais combien de temps sont les visiteurs sur le site.

Par contre pour le javascript, j’en ai déjà vu qui lancent une alerte quand tu quittes le site (changement de domaine, fermeture du navigateur).

MySQL c’est prévu pour gérer ce genre de petites requêtes de façon très efficace, donc ça ne risque pas sur mettre un serveur sur les genoux s’il n’est pas trop mal dimensionné. :neutre:

Oui sûrement, mais bon ça a ses limites.

Y a sûrement mieux comme moyen, c’est ce que je veux dire.