Witaj.
Jest prosty i edukacyjny sposób (nie super wydajny):
Możesz utworzyć dodatkową tabele, w której będziesz przechowywał info o użytkownikach online na stronie.
Tabela taka powinna mieć strukturę (przykładowo):
id_user ip last_activity
Z unikalnych kluczem (jednym) na polach id_user+ip
id_user - przechowywało by wartość 0 (dla niezalogowanych) oraz id uzytkownika jeśli jest zalogowany
last_activity - timestamp po którym okreslalibyśmy czy danego użytkownika uznać za obecnego czy nie
ip - tylko po to by rozróżniać po sobie użytkowników niezalogowanych
i tak:
Po wejściu na kazdą stronę powinien być do tej tabelki insert na zasadzie:
INSERT INTO users_online (id_user,ip,last_activity) VALUES ([id_usera_lub_0_jesli_niezalogowoany],[adres_ip_klienta],NOW()) ON DUPLICATE KEY UPDATE last_activity = NOW()
To zapytanie doda wiersz dla danego usera jak go nie ma albo zaktualizuje czas ostatniej aktywności.
Jak teraz odczytać dane:
SELECT * FROM users_online WHERE UNIX_TIMESTAMP(last_activity) + 2*60 > UNIX_TIMESTAMP(NOW())
Masz już listę użytkowników, którzy coś zrobili w przęciągu ostatnich 2 minut (wartość tą można zmienić)
usuwanie niepotrzebnych rekordów można zrobić raz na jakiś czas poprzez usunięcie rekodrów gdzie czas jest starszy od 2 minut
Pamietać trzeba że w tym sposobie przy zalogowaniu uzytkownika należy zaktualizować rekord z jego IP jak był niezalogowany - inaczej będzie 2 userów a nie jeden.
W bardziej zaawansowanych skryptach/szkieletach w bazie zapisywane są często różne dane bieżące o sesji użytkownika - w takich przypadkach nie ma problemu z określeniem liczby userów online itd...