Pomysły macie w sam raz ale pozwólcie, że podzielę się swoim

Nie możesz zapisywać tylko wartości 0/1 w zależności od statusu, bo co jeśli zamknę przeglądarkę...? będę nadal dostępny.
Najlepszym sposobem - skorzystaj z bazy danych (pliki odpadają z uwagi na szybkość zapisu i dostęp do danych), struktura: id|usr|time, id - A.I., usr - nick zalogowanego, time = wartość funkcji time().
Ok, masz już wszystko gotowe

za każdym razem uruchamiaj taką funkcję (napisz ją sobie na podstawie tego co powiedziałem) i zapisuj WSZYSTKIE odświeżenia zalogowanych.
Jeśli chodzi o wyświetlanie listy - zwykłe zapytanie z GROUP BY `usr`

Aby nie zaśmiecać bazy ustaw również w początkowej funkcji odnajdowanie i usuwanie wyników nie spełniających kryteriów - np. ty chcesz jedynie ostatnie 5min, a w bazie masz także zapisy z ostatnich kilku godzin.

Polecam również skorzystanie z zapytania TRUNCATE, chyba, że lubisz mieć id o długości 20 znaków po kilku dniach

Pozdrawiam,
pytaj jak czegoś nie wiesz