This script works great and you can define the amount of time before it deletes a user if they are not present anymore.
$elapse_time = time()-(120);
View example here
The following sets the users and guest into the table
<?php
# Mainfile.php
# is called in the index of your site so it always is checking and updating when navigating
# Whos Online SQL
function session_online() {
global $prefix,$_COOKIE,$cookieName,$_SERVER;
$elapse_time = time()-(120);
$whosonsql = mysql_query("SELECT * FROM ".$prefix."_sessions WHERE session_time < $elapse_time") or die (mysql_error());
if (mysql_num_rows($whosonsql)) {
$whodDsql = mysql_query("DELETE FROM ".$prefix."_sessions WHERE session_time < $elapse_time") or die (mysql_error());
}
//================================================
if (isset($_COOKIE[$cookieName])) {
$delguestsql = mysql_query("DELETE FROM ".$prefix."_sessions WHERE session_ip = '".$_SERVER["REMOTE_ADDR"]."' ") or die (mysql_error());
$whosql = mysql_query("SELECT * FROM ".$prefix."_sessions WHERE session_user = '".$_COOKIE[$cookieName]."' ") or die (mysql_error());
if (!mysql_num_rows($whosql)) {
$session_time = time();
$session_user = $_COOKIE[$cookieName];
$whsql = mysql_query("INSERT INTO ".$prefix."_sessions (session_user,session_time) VALUES ('$session_user','$session_time')") or die (mysql_error());
}
} else {
$whosql = mysql_query("SELECT * FROM ".$prefix."_sessions WHERE session_ip = '".$_SERVER["REMOTE_ADDR"]."' ") or die (mysql_error());
if (!mysql_num_rows($whosql)) {
$session_time = time();
$remote_address = $_SERVER["REMOTE_ADDR"];
$whsql = mysql_query("INSERT INTO ".$prefix."_sessions (session_ip,session_time) VALUES ('$remote_address','$session_time')") or die (mysql_error());
}
}
}
?>
The following queries the users and counts the guests
<?php
# Whos_Online.php
# is the display to all
echo "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" class=\"Whos_Online_Border\">\n"
. "<tr>\n"
. "<td align=\"center\" class=\"Whos_Online_Text\">\n";
$whossql = mysql_query("SELECT * FROM ".$prefix."_sessions S1,".$prefix."_users S2
WHERE S1.session_user > 0
AND S2.aID = S1.session_user
ORDER BY S2.uname
") or die (mysql_error());
if (mysql_num_rows($whossql)) {
while ($whos = mysql_fetch_array($whossql)) {
echo " ".$whos["uname"]." <br>\n";
}
} else {
echo "No Members<br>Online";
}
echo "</td>\n"
. "</tr>\n"
. "<tr height=\"10\">\n"
. "<td align=\"center\" height=\"10\"></td>\n"
. "</tr>\n";
$guest_cntsql = mysql_query("SELECT count(session_ip) FROM ".$prefix."_sessions WHERE session_ip != 0") or die (mysql_error());
$guest_cnt = mysql_result($guest_cntsql,0,0);
echo "<tr>\n"
. "<td align=\"center\" class=\"Whos_Online_Text\">Guest ".number_format($guest_cnt,0)."</td>\n"
. "</tr>\n"
. "</table>\n";
?>