[PHP/MySQL] Online Status

Seit dem ich 10 Stunden im Büro vorm PC sitze bin ich nich mehr der selbe S:
Aber muss nen Praktikum von der Schule aus machen ^^

Hm.. Naja die Antwort(en) hatte ich eigentlich gegeben, ohne groß zu lesen. Ich hatte nur gedacht, weil ich bei meinem PHP-Script (Sowas wie Wikipedia) Die Ausgabe mit Users gemacht habe. Aber auf die Idee mit der SQL Query wäre ich ned gekommen ^.^ War sowieso noch nie gut in SQL XD
 
Ich würde es so machen,

Speicher die SessionID und mach einen Timestamp.

D.h. beim einloggen vom User wird die SessionID und ein
Timestamp (aktuelle Zeit) in eine DB geschrieben.
Immer wenn der User eine neue Seite öffnet, wird der Timestamp
erneuert. (Wieder mit der aktuellen Zeit.)
Dann baust du dir noch ein Script zusammen, dass du in den Header
baust, das prüft, ob der Timestamp länger als x (z.b. 10min) ist.
Ist das der Fall, Soll er bei dem User oder bei den Usern den Timestamp
und die SessionID auf Null sein. Gegebenfalls prüfst du noch ob eine SessionID
eingetragen ist, sonst setzt der die, die schon auf Null sind auch wieder auf Null.

Hab ich schon erprobt und bei mir hats Funktioniert.
 
Ich habe auch einen Online-Script ich habe es wie folgt gemacht:

PHP:
<?
    $sql = "SELECT
                COUNT(*) as Anzahl
            FROM
                online
            WHERE
                IP = '$_SERVER[REMOTE_ADDR]";
    $result = mysql_query($sql) OR die(mysql_error());
    $row = mysql_fetch_assoc($result);
    if($row['Anzahl']) {
        // Nur Datum Updaten
        $sql = "UPDATE
                    online
                SET
                    Datum = NOW()
                WHERE
                    IP = '$_SERVER[REMOTE_ADDR]'";
        mysql_query($sql) OR die(mysql_error());
    } else {
        // Neuer eintra
        $sql = "INSERT INTO online
                    (IP, Datum)
                VALUES
                    ('$_SERVER[REMOTE_ADDR]', NOW())";
        mysql_query($sql) OR die(mysql_error());
        
    }

    // alte Datensätze löschen
    $sql = "DELETE FROM
                online
            WHERE
                DATE_SUB(NOW(), INTERVAL 5 MINUTE) > Datum";
    mysql_query($sql) OR die(mysql_error());
?>
online.php kannst du die benennen, und wenn du wirklich die Aktive Zeit des Users auf der Seite haben möchtest ( als Onlinekennzeichnung ) kannst du über AJAX immer eine Anfrage schicken.
Aber wie die Kollegen vor mir gesagt haben, kann recht viel Traffic dadurch entstehen. Traffic Flat wäre da angebracht.
Es gibt User die haben mal das Fenster 24 Stunden auf ohne Aktiv zu sein. Dann sind da paar MBs verflogen für nichts.

Hoffentlich hilft dir das weiter.
Gruss
Steffen
 
@keymaker:
Deine 3-Query-Abfrage kannst du zusammenfassen:
Code:
[FONT=Courier New][B][COLOR=#9932cc]INSERT[/COLOR][/B] [B][COLOR=#9932cc]INTO[/COLOR][/B] [B][COLOR=#9932cc]table[/COLOR][/B] (`key`, value) [B][COLOR=#9932cc][B][COLOR=#9932cc]VALUES[/COLOR][/B] [/COLOR][/B][COLOR=#9932cc]([/COLOR]'foo', 'bar'[COLOR=#9932cc])[/COLOR]
[B][COLOR=#9932cc]ON[/COLOR][/B] [B][COLOR=#9932cc]DUPLICATE KEY UPDATE[/COLOR][/B] value = 'bar';[/FONT]
 
Warum muss eigentlich noch jeder seine Lösung posten, wenn das Thema schon längst gelöst ist und die neue Lösung sogar schlechter ist? :roll: