Useronline-System (nur WER, nicht WIEVIELE)

  • Themenstarter Themenstarter blaZehawK
  • Beginndatum Beginndatum
B

blaZehawK

Hallo, liebes Forum!
Ich weiß, dass diese Frage schon öfter gestellt wurde, aber in allen vorherigen Beiträgen habe ich keine passende Antwort auf meine Frage gefunden. Deshalb formuliere ich einfach mal selbst:

Ich habe also ein Login-System (siehe hier ), bei dem jeder Person, die sich einloggt, genau ein Username zugeordnet wird, und eine Session gestartet wird. Jetzt möchte ich anzeigen, wer von meinen Mitgliedern gerade online (also eingeloggt) ist. Ich habe schon überlegt, ob ich irgendwie prüfen kann, wieviele Sessions (bzw welche Sessions) gerade eingetragen sind, und diese dann auszulesen, jedoch scheint das anscheinend nicht möglich zu sein. Also müssen beim Login eines Mitgliedes also sein Username mit einem Timestamp in eine andere TAbelle der Datenbank eingetragen werden, aus der ich dann ablesen kann, wer gerade eingeloggt ist. Soweit der theoretische Teil - nur wie im Detail sieht das nun aus? Es wäre nett, wenn ihr mir das "Anfänger-gerecht" erklären könntet, bzw würde ich mich super freuen eine fertiges Codeschnipfselchen zu bekommen ;) Ich hoffe mir kann jemand helfen, wie ich das machen kann!

PS: Mein Loginscript sieht folgendermaßen aus:
PHP:
<?
session_start();
if(trim($_POST[login]) && trim($_POST[passwort]))
{
  //Verbinden zum Server
    mysql_connect("localhost","DBXXX","PAsswort") or die("Connect nicht möglich: ".mysql_error());
  
  //Übergebene Daten gegen SQL Injections schützen
  if(get_magic_quotes_gpc()) 
  {
    $login = $_POST[login];
    $pwd = $_POST[passwort];
  }
  else
  {
      $login = addslashes($_POST[login]);
    $pwd = addslashes($_POST[passwort]);
  }
    
    //Daten holen
    $sql = "SELECT * from users 
           WHERE login ='".$login."'
           AND pwd ='".$pwd."'
           LIMIT 0,1";

  $result = mysql_db_query('DB44537',$sql) or die(mysql_error());
    $row = mysql_fetch_assoc($result);
    
    //recheck der Daten
    if($row[login] == stripslashes($_POST[login]) && $row[pwd] == stripslashes($_POST[passwort]))
    {
      //Login erfolgreich
      //User in die Session eintragen
        $_SESSION['userID']=$row[userID];
        $_SESSION['username']=$row[username];
        
        //und auf die Startseite redirecten.
        header("location: http://".$_SERVER[SERVER_NAME]."/destination/memberarea/index.php");

    }
    else
    {
        $status = "Falsches Login oder Passwort";
    }
}
else
{
//Daten wurden noch nicht vollständig ausgefüllt
$status = ($_POST['anmelden']) ?'Bitte alle Felder ordnungsgemäß ausfüllen!' : 
'Nicht eingeloggt...';
}
?>

MfG
Stefan
 
Da wir hier nicht einfach so auf Frage direkt den ganzen Code vorkauen möchte ich allerdings ein paar Ansätze nennen.
Zunächst einmal musst du evtl ein bestehendes UserOnlineScript anwenden. Dort wird meist beim Login eines Benutzers bzw. auf jeder Seite ein Datensatz in in eine Tabelle geschrieben. Dort speicherst du UserId oder Username, evtl. die IP und vor allem einen Zeitstempel. Gleichzeitig löscht du alle Datensätze wo der Zeitstempel älter als eine festgelegte Zeitspanne (z.B. 5min) ist.

Ein normales UserOnlineScript holt jetzt nur die Anzahl der vorhanden Datensätze raus. Dein Script müsste an dieser Stelle einfach nur alle Datensätze auslesen und darstellen.

Tipps für die SQL-Anweisungen:
PHP:
$sql = "INSERT INTO useronline (Username, IP, Zeit) VALUES (".
        "'".$_SESSION["username"]."', '".$_SERVER["REMOTE_ADDR"]."', '".time()."')";
mysql_query ($sql);

$sql = "DELETE FROM useronline WHERE Zeit < ".(time () -300);
mysql_query ($sql);


// und zum Auslesen

$sql = "SELECT Username FROM useronline";
Hoffe ich hab nirgends Fehler. Hab das ganze nämlich nicht getestet.
 
Ich war mal dazu gezwungen meine eigene Sessionverwaltung zu programmieren. Die Sessioninformationen werden in eine MySQL Tabelle geschrieben und bleiben dort auch nach dem Ablauf des SessionCookies um noch als "dynamische Logdatei" zu funktionieren.
Ich kann also jederzeit detailierte Informationen über alle seit dem all-mitternächtlichen Reset vergebenen Sessions abrufen und darstellen.
Ich verwende nur noch mein eigenes Session-System (ausser wenn keine Datenbank zur Verfügung steht)
 
Zurück