Przy każdej akcji użytkownika zapisujesz do bazy jej (akcji) czas. To wystarczy.
edit:
Jeżeli niepokojąco zwiększy to użytkowanie bazy, można przenieść to do sesji (o ile sesja z bazy nie korzysta

)
Cytat(Predator446 @ 25.07.2007, 23:07:22 )

Ja bym to zrobił inaczej...
Tzn. dodajesz przy użytkowniku pole w tabeli np o nazwie Date i gdy użytkownik się loguje na stronę to wówczas do pola dajesz wartość online (czyli jest aktualnie na stronie), a gdy się wyloguje to skrypt zmienia wartość pola na datę, w której nastąpiło wylogowanie czyli w rezultacie kiedy był ostatnio na stronie

A jak się nie wyloguje? To co wtedy? Lepiej połączyć to co ja napisałem z twoim pomysłem. Sprawdzać czas pomiędzy logowaniem a ostatnią akcją - jeżeli jest większy niż np 15min można uznać, że użytkownik jest offline/wylogować.