Bij elke keer dat er iemand een request doet en dus een sessie gechecked wordt op of de user ingelogd is, doe ik een UPDATE request: dat inlog veld is bij mij een TIJD/DATUM in plaats van een 1 een 0. hierdoor kijk je alleen hoeveel mense er over de afgelopen 10 minuten op de site zijn geweest.
als iemand 10 min niet actief is geweest, betekend dat niet dat hij/zij offline is. en als ik dit verleng. dan is nog mijn probleem niet op gelost van zien wie er online is.
Bijv. dit:
<?
function logoff()
{
mysql_query("UPDATE users SET online = 'no' WHERE id = '".$toevoeger_id."'") or die('Error: '. mysql_error());
}
?>
<body onunload=logoff()>
Het is per definitie niet waterdicht. Je zult ergens een keer moeten definieren of iemand online is of niet. Mijnd efinitie is dat wanneer iemand 10 minuten of een kwartier niet meer de site bekeken heeft deze niet online meer is. HTTP werkt gewoon zo. Ik vind het prima werken, anders zul je meer naar p2p achtige systemen moeten, maar dat is met php slecht te realiseren.
Bij mij werkt het ook tweezijdig: en bij gebruikersprofiel als "Laatst online" en om te checken hoeveel mensen er momenteel online zijn (=over de afgelopen 10 minuten requests hebben gedaan).
Jouw waterdichte oplossingen wordt gewoon simpelweg niet gedragen door het http protocol.