Wstaw sobie do tabelki z użytkownikami dodatkową kolumnę, w której będziesz przechowywał ich ostatnie ID sesji. Dodatkowo potrzebujesz sposobu na odczytanie danych sesyjnych na podstawie tego ID. Sposoby są dwa:
1. Własny "
session save_handler" i zapisywanie danych sesji w bazie (lub innym łatwo dostępnym miejscu) + odczyt zserializowanych danych sesyjnych użytkownika +
unserialize/
serialize2. I moim zdaniem bardziej hardkorowe:
Tymczasowa zmiana sesji administratora na sesję użytkownika, modyfikacja zmiennych, powrót do sesji administratora (
session_id,
session_write_close i inne)
I teraz administrator, gdy chce zbanować użytkownika to:
- zapisuje w bazie danych w tabeli z użytkownikami, że jest zbanowany
oraz:
- odczytuje sessionID użytkownika
- uzyskuje dostęp do jego sesji
- usuwa informację o "zalogowaniu użytkownika" z sesji
Zalogowany zbanowany użytkownik, gdy odświeży stronę nie będzie już zalogowany (bo admin usunął ta informację z jego sesji), a po próbie zalogowania się na stronie dostanie info, że dostał bana.
Oczywiście jest to trochę ciężkie do napisania. O wiele prościej przy każdym wyświetleniu strony robić
SELECT * FROM users WHERE user_id = $SESSION['user_id']
i na tej podstawie sprawdzać, czy jest zbanowany itp., ale wtedy nie potrzebujesz obiektu klasy User trzymać w sesji - wystarczy samo ID użytkownika.