Dein Vorschlag ist ziemlich rechenintensiv, da bei jedem Seitenaufruf die komplette Tabelle durforstet wird.
Mein Vorschlag wäre.
Bei jedem Seitenaufruf:
PHP-Code:
//Datenbank von alten einträgen (älter als 5 min säubern)
$sql = "DELETE FROM table_onlineuser WHERE TIMESTAMPDIFF(MINUTE, time, CURRENT_TIMESTAMP()) > 5";
mysql_query($sql);
//Neuen Datensatz anlegen oder falls die kombination aus ip und session_id
//schon existiert, wird nur der timestamp aktualisiert.
$ip = $_SERVER["REMOTE_ADDR"];
$session_id = session_id();
$sql = "REPLACE INTO table_onlineuser SET ip = '".$ip."', session_id = '".$session_id."', time = CURRENT_TIMESTAMP()";
mysql_query($sql);
//Überprüfen ob schon 3 User mit der IP angemeldet sind.
$sql = "SELECT count(*) FROM table_onlineuser WHERE ip = '".$ip."'";
$query = mysql_query($sql);
$result = mysql_result($query, 0, "count(*)");
if($result > 3) {
//Was passiert wenn mehr als 3 mit einer IP einloggt sind.
}
"time" muß den Typ "timestamp" haben. Die Spalten "ip" und "session_id" müssen als zweispaltiger index angelegt werden.
Ich würde die Zahl der gleichzeitig eingeloggten allerdings erhöhen und evtl noch verschiedene andere argumente zur Absicherung einpacken. Wenn sich 10 leute in einer Uni, eingeloggt über den gleich Knoten auf deiner Seite sind, würden alle gesperrt werden, da sie alle die IP adresse der Uni haben.
bye