Page 1 sur 2
Compter le nombre de personne connécté
Posté : 29 mars 2005, 12:41
par aqua007
Bonjour,
J'aurai voulus savoir par quel moyen on comptai le nombre de personnes connecté sur un site à un instant donné. Je pense au faite de compter le nombre de sessions. Peut-on faire comme celà ou il y a un autre moyen.
Merci.
Posté : 29 mars 2005, 14:29
par Jerem'
Oui avec les sessions : dans une base de données il faut une table "enligne" avec champs "session" et "time" (et eventullement page...)
Quand une page est chargée par quelqu'un :
Tu regarde si il est dans la table en ligne
SELECT time FROM enligne WHERE session='$lasession'
Si oui tu l'update
UPDATE enligne SET time='$letime' WHERE session='$lasession'
Si non tu l'ajoutes
INSERT INTO enligne(session,time) VALUES ('$lasession','$letime')
Ensuite tu deletes les trop vieux enregistrement
DELETE FROM enligne WHERE time<'$limitedetemps'
Et enfin tu peux recuperer la liste des connectes dans la table

Posté : 29 mars 2005, 15:34
par aqua007
okay merci :)
Et pour le time limit, ce serait quoi dans la logique ?
Posté : 29 mars 2005, 17:00
par Elie
Le plus simple est donc de creer une session a chaque fois que quelqu'un se connecte ...
Dans cette session tu recupere son ip afin d'identifier si c'est toujours la meme personne connecter ...
Ensuite tu fais ca :
1° Tu verifie si l'ip est dans ta table :
- Si elle y est tu l'update avec le time() actuelle
- Si ele n'y est pas tu creer une session
2° Tu fais un DELETE des ligne ou le time_max est plus grand que time() + X secondes
Voila la logique apres tu fais la pratique comme tu le veux ...
Posté : 29 mars 2005, 22:51
par aqua007
Oki thx :)
Posté : 30 mars 2005, 09:48
par Jerem'
1° Tu verifie si l'ip est dans ta table :
Il vaut mieux enregistrer les sessions, l'IP n'est pas unique, la session par contre l'est

Posté : 30 mars 2005, 09:56
par flitox
Personnellement je n'utilise même pas de sessions et ça marche aussi bien

Posté : 30 mars 2005, 10:03
par Jerem'
Tu mets quoi ?
Posté : 30 mars 2005, 10:06
par flitox
connectes.php :
<?php require ("config.inc.php");
@mysql_connect($host,$user,$pass) or die("Impossible de se connecter à la base de données");
@mysql_select_db($bdd) or die("Impossible de se connecter à la base de données");
$tps_max_connex = 180;
$temps_actuel = date("U");
$querytest = "SELECT * FROM csdz_connectes WHERE ip='".$_SERVER['REMOTE_ADDR']."'";
$resulttest = mysql_query($querytest);
if(mysql_num_rows($resulttest) == 0)
{
$queryins = "INSERT INTO csdz_connectes(ip,time) VALUES('".$_SERVER['REMOTE_ADDR']."', '".$temps_actuel."')";
$resultins = mysql_query($queryins);
}
else
{
$queryupd = "update csdz_connectes SET time='".$temps_actuel."' WHERE ip='".$_SERVER['REMOTE_ADDR']."'";
$resultupd = mysql_query($queryupd);
}
$heure_max = $temps_actuel - $tps_max_connex;
$querydel = "DELETE FROM csdz_connectes WHERE time < $heure_max";
$resultdel = mysql_query($querydel);
?>
Et dans chaque page un
include("connectes.php");
Affichage :
<?php
$querycount = "SELECT count(ip) FROM csdz_connectes GROUP BY ip";
$resultcount = mysql_query($querycount);
$nbcon = mysql_num_rows($resultcount);
echo "Actuellement".$nbcon."connectés";
?>
Posté : 30 mars 2005, 10:23
par Jerem'
Oue mais bon les résultats sont faux si plusieurs personnes ont la même IP
Posté : 30 mars 2005, 11:21
par flitox
Le script est basique c'est sûr qu'il y a moyen d'améliorer

Posté : 30 mars 2005, 12:52
par aqua007
ah wai pas bête, si des personnes sont derrière un proxy elles ont la même ip, j'avais pas pensé à ça!
Posté : 30 mars 2005, 13:10
par sadeq
Oue mais bon les résultats sont faux si plusieurs personnes ont la même IP
Je ne suis pas d'accord, puisque le script cible
les utilisateurs actuellement connectés, qu'ils soient derrière un proxy (même IP) ou pas, une connexion est ouverte pour chacun, il faut la compter.
Posté : 30 mars 2005, 13:40
par Jerem'
Bah tu peux avoir 15 personnes connectées en même temps avec la même IP donc si t'en comptes qu'une ça sera faux...
Tandis qu'elle auront chacunes des sessions différentes...
Posté : 30 mars 2005, 14:24
par sadeq
Ok, on est d'accord d'après ce que tu viens de dire, mais la requête n'est correcte qu'à condition que ip n'est pas une clé primaire et d'enlever la clause GROUP BY.
$querycount = "SELECT count(ip) FROM csdz_connectes GROUP BY ip";
$resultcount = mysql_query($querycount);
$nbcon = mysql_num_rows($resultcount);
echo "Actuellement".$nbcon."connectés";
un GROUP BY (qui n'est utilisé que pour organiser les doublons) n'est pas obligatoire dans cette requête. sinon le compte se fera par ip.
Sans le GROUP BY et avec un ip non clé primaire de la table, si on a 15 personnes connectées en même temps avec la même IP la requête affiche le compte des ip's trouvées dans la table.
Exemple :
ip ....
x.x.x.x
x.x.x.x
x.x.x.x
y.y.y.y
z.z.z.z
La requête affiche : 5
Avec le group by elle affiche :
3
1
1