Qui est online?


Contenu du snippet

ben voilà un ptit code pour voir les membres qui sont connectés actuellement. ce code n'est pas complet : il doit etre adapté à votre site pour bien fonctionner. voici ce dont il a besoin:

- une session ouverte sur chaque page (bah je pense que tout le monde le fait non?)
- une fonction is_online() qui renvoie un booleen si le membre est connecté ou non (visiteur non loggué)
- si le membre est logué, son id doit etre dans $_SESSION[id_mb];
- une table contenant les membres online (schéma de la table, voir en bas)

je considère un membre déconnecté après 10minutes d'inactivité, ça me semble correct

ce code a été fait à l'arrache et je pense qu'on peut y ajouter pleins de modifs lol

Source / Exemple :


// le code à insérer sur chaque page (il est préférable de le mettre dans un include pour pas envahir votre code ;)
//////////////////////////////////////
$id_user=(is_online())?($_SESSION[id_mb]):(0);
		$t=mysql_query("select * from sessions where phpsessid='".session_id()."';");
		if(mysql_num_rows($t)==1 && $_SESSION[id_session]==mysql_result($t,0,'id')){ //session déjà registrée
			mysql_query("update sessions set id_user='$id_user',date_fin=NOW(),url_page='$_SERVER[REQUEST_URI]' where id='$_SESSION[id_session]' and phpsessid='".session_id()."';");
		}else{ //new session
			mysql_query("delete from sessions where phpsessid='".session_id()."';"); //supprime l'éventuelle session qui a le meme phpsessid
			if(is_online())
				mysql_query("delete from sessions where id_user='$_SESSION[id_mb]' and phpsessid<>'".session_id()."';");
			mysql_query("insert into sessions (phpsessid,id_user,ip,date_debut,date_fin,url_page) values ('".session_id()."','$id_user','$_SERVER[REMOTE_ADDR]',NOW(),NOW(),'$_SERVER[REQUEST_URI]');");
			$_SESSION[id_session]=mysql_insert_id(); session_register("id_session");
		}
		//maintenant faut faire le ménage pour voir ceux qui se sont déconnectés entre temps
		$connectes=mysql_query("select * from sessions order by date_fin asc");
		$limite=mktime(date('H'),date('i')-10,date('s'),date('m'),date('d'),date('Y'));
		for($i=0;$i<=mysql_num_rows($connectes)-1;$i++){
			$date_fin=strtotime(mysql_result($connectes,$i,'date_fin'));
			if($date_fin<$limite){
				mysql_query("delete from sessions where id='".mysql_result($connectes,$i,'id')."';");
			}else break; //pour pas tous les reparcourir pk c trié dans l'ordre date_fin asc
		}

//et le code à mettre aussi sur chq page qui affiche le nombre de connectés et de visiteurs
//////////////////////////////////////

$mb_connectes=mysql_query("select * from sessions where id_user<>'0';");
$nb_mb_connectes=mysql_num_rows($mb_connectes);
$connectes=mysql_query("select * from sessions where id_user='0';");
$nb_connectes=mysql_num_rows($connectes);
echo number_format($nb_connectes,0,'',' ').'&nbsp;visiteurs';
echo ', ';
echo number_format($nb_mb_connectes,0,'',' ').'&nbsp;membres';

Conclusion :


Voilà la structure de la table, l'id du membre est stocké en INT(10), ça peut etre adapté à votre site si besoin

CREATE TABLE `sessions` (
`id` int(10) NOT NULL auto_increment,
`phpsessid` varchar(255) NOT NULL default '',
`id_user` int(10) NOT NULL default '0',
`ip` varchar(15) NOT NULL default '',
`date_debut` datetime NOT NULL default '0000-00-00 00:00:00',
`date_fin` datetime NOT NULL default '0000-00-00 00:00:00',
`url_page` varchar(255) default NULL,
UNIQUE KEY `id` (`id`),
UNIQUE KEY `phpsessid` (`phpsessid`)
) TYPE=MyISAM;

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.