Takie coś najlepiej jest robić za pomocą bazy danych. Przykładowo fora mają tabelę sessions, gdzie zapisywane są m.in. takie dane jak:
- IP obecnie przeglądających stronę,
- losowo wygenerowany ciąg znaków - unikalny dla każdej sesji,
- ID usera (jeśli niezalogowany to np. 0).
W tym momencie, przy logowaniu usera tworzysz mu sesję z poziomu PHP, np:
$_SESSION['login'] = $user_id; // np. $_SESSION['login'] = 4;
Dodatkowo możesz wysłać do bazy - tabela np. sessions wartości:
- id usera 4,
- losowy ciąg znaków wygenerujesz sobie na podstawie np. microtime i dasz to w md5,
- IP no to wiadomo.
Teraz, nie sprawdzasz tylko czy $_SESSION jest większe od 0, ale odwolujesz się też do bazy, więc jesli chcesz usunąć usera to z bazy, z tabeli sessions wywalasz wpis, gdzie session_user_id = 4. Następnie, jesli ten delikwent odświeży stronę to do bazy standardowo pójdzie zapytanie sprawdzające jego sesję:
SELECT * FROM `sessions` WHERE session_user_id = 4;
jeśli mysql zwróci pusty wynik to wiadomo, że tej sesji nie ma w bazie, wylogoujesz takiego usera (session_destroy() + header location).