Ich hattemal das gleiche Prob und habe dafür eine simplöe Lösung gefunden.
Nach dem Login wird die Session des Users, seine letzte Aktivität und seine UserID (Oder irgendwas eindeutiges vom User) inder Datenbank gespeichert.
Also eine Tabelle mit den Spalten
- id (Ich hab immer eine Standard-Id, auch wenn die userid den selben Zweck erfüllt

)
- userid
- sessionid
- timestamp
Bei jeder seiner Aktionen musst du mit Hilfe der SessionId in der Datenbank den User finden und das aktuelle Datum mit dem Datum aus der DB vergleichen. Liegen da 15 min. zwischen, kriegt er eine Login-Seite und der DB-Eintrag wird gelöscht. Wenn nicht, dann kann er weitermachen und sein Timestamp wird erneuert.
Wenn er sich nun nochmal einloggen will, kommst du durch die userdaten schnell auf die UserId und siehst, dass er schon eingeloggt ist --> Login verweigern
Wenn er sich ausloggt, schmeißt du einfach seinen Datenbankeintrag wieder raus.