Aller au contenu

Compteur visiteurs instantanés


Sujets conseillés

Posté (modifié)

Bonjour,

J'ai vu que Dan se la jouait pas mal avec ses illustres visiteurs connectés (Yahoo, Google, Adsense, Cleden etc) :rolleyes:. J'aimerai savoir si vous ne connaitriez pas un script me permettant d'afficher les mêmes infos, c'est à dire:

- Les membres connectés,

- Les invités connectés,

- Les moteurs (pourquoi pas).

Je me doute qu'il me faudra adapter ce script à la table de mes membres. S'il n'existe pas de script '"tout faits", j'aimerais juste qu'on me donne la technique pour que je le tente avec mes petites mains.

Merci d'avance,

Loïc.

Modifié par Dan
Posté

Dan utilise IPB => Regardez le code source d'IPB. Et pour exporter les fonctionnalites d'IPB dans une application PHP externe a IPB, rien ne vaut IPBSDK.

;)

Posté
Dan utilise IPB => Regardez le code source d'IPB. Et pour exporter les fonctionnalites d'IPB dans une application PHP externe a IPB, rien ne vaut IPBSDK.

;)

<{POST_SNAPBACK}>

Heu, je te remercie pour ta réponse :)

J'imagine que le code d'IPB ne doit pas être simple pour le débutant en php que je suis.

N'existe-t-il pas une solution plus simple car je me vois mal aller fouiner dans le code d'IPB ?

Loïc.

Posté (modifié)

il existe un manuel tres bien documente pour ipbsdk.

Mais soudain, je doute que la fonction list_online_members affiche aussi les robots... Juste les membres.

Modifié par Dash
Posté
Slt,

Cleden, tu désires adapter ce script sur un forum ? un CMS ?

<{POST_SNAPBACK}>

En fait, j'aimerai l'utiliser avec la table des membres de mon site www.ouetu.com

Comme vous pouvez le voir j'y ai déjà un script m'indiquant le nombre de visiteurs mais j'aimerai l'améliorer en précisant les membres connectés etc.

J'ai pensé ajouter une colonne dansla table de mes membres, j'updaterai celle-ci à chaque page pour y mettre le timestamp de la dernière action du membre. Mais j'ai peur que ce soit un peu lourd de le faire à chaque page.

Loïc.

Posté

Tout le principe du système est de considérer qu'un moteur est un membre à part entière.

Quand google arrive sur le site, il est considéré comme un membre, et loggé comme tel. ;)

Posté

Perso, j'utilise un gestionaire de sessions php personnalisé et geré par mysql. Il me suffit d'une requete mysql pour avoir le nombre de membres ou de visiteurs connectés. ca marche très bien et très simplement.

  • 4 semaines plus tard...
Posté
Tout le principe du système est de considérer qu'un moteur est un membre à part entière.

Quand google arrive sur le site, il est considéré comme un membre, et loggé comme tel. ;)

<{POST_SNAPBACK}>

Oui, vu comme ça, c'est plus simple. Il ne me reste plus qu'à trouver comment reconnaitre les membres.

Perso, j'utilise un gestionaire de sessions php personnalisé et geré par mysql. Il me suffit d'une requete mysql pour avoir le nombre de membres ou de visiteurs connectés. ca marche très bien et très simplement.

<{POST_SNAPBACK}>

Pourrais-tu me dire ou trouver ce fameurx gestionnaire ?

Loïc.

Posté

je te mettrai mon script en ligne lundi, là je l'ai pas sous la main... ;-)

Posté (modifié)

Le shéma de la table mysql :

CREATE TABLE `nc_session` (
 `unique_id` int(5) unsigned NOT NULL auto_increment,
 `last_modification` datetime default '0000-00-00 00:00:00',
 `valid` enum('yes','no') NOT NULL default 'yes',
 `session_id` varchar(32) NOT NULL default '',
 `remote_addr` varchar(15) NOT NULL default '',
 `http_referer` varchar(100) NOT NULL default '',
 `session_data` text NOT NULL,
 PRIMARY KEY  (`unique_id`),
 KEY `session_key` (`session_id`),
 KEY `valid` (`valid`),
 KEY `valid_2` (`valid`)
) TYPE=MyISAM AUTO_INCREMENT=1;

Voici les fonctions :

function nc_session_open($path, $name)
{
return TRUE;
}

function nc_session_close()
{
return TRUE;
}

function nc_session_read($sess_id)
{  
$data = nc_requete_mysql("SELECT session_data FROM ".session_table." WHERE session_id = '".$sess_id."' and remote_addr ='".$_SERVER['REMOTE_ADDR']."' AND valid = 'yes'");
if($data != TRUE)
 {
 return '';
 }
if ($data['num_rows'] > 0)
 {
 return $data['result'][0]['session_data'];
 }
else
 {
 return '';
 }
}


function nc_session_write($sess_id, $sess_data)
{
$sess_data = mysql_escape_string($sess_data);
$sess_id = mysql_escape_string($sess_id);
$data = nc_requete_mysql("SELECT unique_id FROM ".session_table." WHERE session_id = '$sess_id' AND valid = 'yes' AND remote_addr ='".$_SERVER['REMOTE_ADDR']."'");
if($data != TRUE)
 {
 return FALSE;
 }
if (isset($data['num_rows']) && $data['num_rows'] > 0)
 {
 $data = nc_requete_mysql("UPDATE ".session_table." SET session_data = '$sess_data', last_modification = now() WHERE session_id = '$sess_id'");
 }
else
 {
 if(isset($_SERVER['HTTP_REFERER']))
 {
 $http_referer = $_SERVER['HTTP_REFERER'];
 }
 else
 {
 $http_referer = 'no_referer';
 }
 $data = nc_requete_mysql("INSERT INTO ".session_table."  (last_modification, valid, session_id, session_data, remote_addr, http_referer) VALUES (now(),'yes', '$sess_id', '$sess_data', '".$_SERVER['REMOTE_ADDR']."', '".$http_referer."')");
 }
return TRUE;
}


function nc_session_destroy($sess_id)
{
$sess_id = mysql_escape_string($sess_id);
$data = nc_requete_mysql("UPDATE ".session_table." SET valid = 'no' WHERE session_id = '$sess_id' and remote_addr ='".$_SERVER['REMOTE_ADDR']."'");
if($data != TRUE)
 {
 return FALSE;
 }
else
 {
 return TRUE;
 }
}

function nc_session_gc($maxlifetime)
{
$data = nc_requete_mysql("UPDATE ".session_table." set valid='no' WHERE last_modification < DATE_ADD(now(), INTERVAL -$maxlifetime SECOND)");
$data = nc_requete_mysql("OPTIMIZE TABLE ".session_table);
if($data != TRUE)
 {
 return FALSE;
 }
else
 {
 return TRUE;
 }
}

il reste ensuite à mettre cette ligne avant l'appel à session_start :

session_set_save_handler ('nc_session_open', 'nc_session_close', 'nc_session_read', 'nc_session_write', 'nc_session_destroy', 'nc_session_gc');

Tu remarqueras que je fait aussi appel à une gestion personalisée des requetes mysql. je te met aussi le code ;-) :

function nc_requete_mysql($requete)
{
global $nombre_requete_mysql;
   debug('Requete SQL', $requete);
$mysql_link=mysql_connect(mysql_server, mysql_login, mysql_pass);
if(!$mysql_link)
 {
 trigger_error ('Connection base MySQL impossible', E_USER_ERROR);
 }
$base_link = mysql_select_db(mysql_base, $mysql_link);
if(!$base_link)
 {
 trigger_error ('Connection table MySQL impossible', E_USER_ERROR);
 }
$result=mysql_query($requete, $mysql_link);
if(!$result)
 {
 trigger_error ('Requete MySQL impossible', E_USER_ERROR);
 }
else
 {
 if(ereg('SELECT', $requete))
 {
 $i = 0;
 while($line = mysql_fetch_assoc($result))
   {
   foreach($line as $name => $value)
   {
   $data['result'][$i][$name] = $value;
   }
   $i++;
   }
 $data['num_rows'] = mysql_num_rows($result);
 }
 $data['nb_affected_rows'] = mysql_affected_rows($mysql_link);
 $data['insert_id'] = mysql_insert_id ($mysql_link);
 }
mysql_close($mysql_link);
$nombre_requete_mysql++;
if(isset($data))
 {
 return $data;
 }
else
 {
 return FALSE;
 }
}

Pour compter le nombre de membres conectés il suffit d'interroger la table sur le nombre de sessions valides. tu peux aussi decider de détruire les sessions au fur et à mesure au lieu de les invalider.

Modifié par martin

Veuillez vous connecter pour commenter

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



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