[Keine CODE Frage]User-Online Script

Hi all,
Ich habe nur 1-2 Fragen, und wollte die nur bestätigt haben…
Normalerweise schätzt man ja wie lange der User Online ist, bei einem User-Online-Script, aber könnte man nicht theoretisch mit Ajax, beim onunload
dem Server „mitteilen“, dass er den User zu löschen hat, aus der Datenbank…dann wäre es doch zu 100% sicher, ob ein User online ist oder auch nicht, vorausgesetzt der USer hat js an.
Das heißt geht das mit Ajax so ein User-Online-Script, habs jetzt nicht getestet, wollte nur mal fragen, was ihr davon haltet, den Code mach ich schon :wink:

Ps: Die Sache mit js ist bei mir klar, denn auf meiner Seite, entscheide ich eh zwischen js-usern, und nicht js-usern.

greez web_spider :smiley:

na ja, wenn ich ein user-online-script machen sollte, würde ich in einer SQL-tabelle ein feld „online“ erstellen und das beim login auf „1“ und beim logout auf „0“ setzen. so kann immer herausgefunden werden, wer online ist und wer nicht.

Nils aka XraYSoLo

das heißt also mit Ajax würde es 100% „richtig“ und präzise arbeiten oder?

auch nur dann, wenn der user JS aktiviert hat.

Nils aka XraYSoLo

Das mit der Db geht auch net. Weil wenn ich mich nicht auslogge, sondern einfach das Browserfenster schließe, wird der Wert nie auf 0 gesetzt!

ja aber so ist das relativ genau…

mein Script funktioniert irgendiwe nicht:
Hauptdatei:

[php]

<?php //Kongiguration include "templates/c_mysql.php"; //Neue Mysql Sitzung $db = new mysql_session(); //Ueberpruefen ob ip schon vorhanden ist $db->setSql('*', 'statistic', 'ip', $_SERVER['REMOTE_ADDR']); $num = $db->getNum(); if($num) //Falls vorhanden ist nur Updaten { $db->updateDate('statistic', 'ip', $_SERVER['REMOTE_ADDR']); } else //Neuen Eintrag schreiben { $puffer = "'".$_SERVER['REMOTE_ADDR']."',"; $puffer.= "NOW()"; $db->insert('statistic', $puffer); } //Alte Datebsaetze loeschen $db->$sql = "DELETE FROM statistic WHERE DATE_SUB(NOW(), INTERVAL 1 MINUTE) > date "; mysql_query($db->$sql); $db->setSql('*', 'statistic'); $num = $db->getNum(); //Anzahl holen //Box kreieren $box = "User Online: ".$num."
\n"; $db->disconnect(); echo " \n \n \n \n \n \n \n \n \n \n ".$box." \n \n \n"; ?>

[/php]Die ajax Datei:

[code]
// ajax.js
//
//Biblotheksdatei zum Senden eines Ajax-Requests
//von Richard Jung(web_spider)

function sendeHTTPRequest(methode, url, postVars)
{
//***************************************************************************//

//HTTP-Request-Objekt erzeugen

var meinRequest = false;
if (window.XMLHttpRequest)
{
    //alle Browser ausser IE 
    meinRequest = new XMLHttpRequest();
    
}
else if (window.ActiveXObject)
{
    //IE Achtung: Versionen beruecksichtigen
    //Versuche bei alten Versionen
    try
    {
        meinRequest = new ActiveXObject("Msxml2.XMLHTTP");
        
    }
    catch (e)
    {
        //Versuche bei IE 5.0 und hoeher
        try 
        {
            meinRequest = new ActiveXObject("Microsoft.XMLHTTP");
        }
        //Hoffnungsloser Fall
        catch (e)
        {}
    }
}

//***************************************************************************//

//Fehlermeldung ausgeben, falls alles fehlgeschlagen ist
if (!meinRequest)
{
    alert("Ihr Browser unterstützt kein Ajax");
}

//***************************************************************************//

//Request oeffnen und konfigurieren    
meinRequest.open(methode.toUpperCase(), url, true) 

//***************************************************************************//   
//Spezialbehandlung fuer einige Mozilla-Versionen    
if (meinRequest.overrideMimeType)
{
    meinRequest.overrideMimeType('text/xml');
}

//***************************************************************************//    
//Zusaetzlichen Header fuer Post-Requests setzten    
if (methode.toUpperCase() == 'POST')
{
    meinRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
}


//***************************************************************************//    
//Request senden
meinRequest.send(postVars);
return true;       

}
[/code]und zu guter letzt die Datei delete.php
[php]

<?php if ($_POST['sent'] == "yes") { $db = mysql_connect("****", "****", "****") or die(mysql_error()); mysql_select_db("db183424299") or die(mysql_error()); $sql = "DELETE FROM statistic WHERE ip LIKE '".$_SERVER['REMOTE_ADDR']."' "; mysql_query($sql) or die(mysql_error()); mysql_close($db) or die(mysql_error()); } [/php]Also nach dem Datenbank priniziep funktioniert es nach 1 Minute wird dann halt der User gelöscht, aber der Ajax Lösch teil funktioniert nicht. Hoffe auf Hilde ;) greez web_spider :D

Mit der DB geht es.

Bei jedem Seitenzugriff muss nen Eintrag in die Db gemacht werden, bzw überschrieben werden. Wenn die Differenz 5 Mins oder so beträgt, ist der User ausgeloggt ^^

ja ich habs sogar nach ner minute aber mein Ajax teil klappt net, mitdem ich 100% präzise arbeiten möchte…

Kannste auch knicken Main Fräunt… warum sag ich ned, als „Erfahrener User“ und ganz besonders als Möchtegern-Programmierer müsstest du das selbst wissen. Du Fragst dich warum ich so schroff antworte? Ganz einfach:
Deine Frage war/ist eine rhetorische, wenn du nichtmal selbst drauf kommst warum dein Anliegen garnicht gehen KANN, dann beschäftigst du dich definitiv mit dem falschen Gebiet.
Die Informatik ist eine seeeehr komplexe Wissenschaft, nicht geeignezt für jedermann da man ein gewisses Verständnis für Maschinen mitbringen muss. Hat man das nicht, mutiert man nach einigen Jahren zum sog. „Fachidiot“, der nur Sourcecode kopiert und diesen dann als den eigenen ausgibt (klingt komisch, is aber so) ;ugl .
Und nun darf man mich wieder mal gerne bannen, weil die Wahrheit schmerzhaft ist, sich dritte wieder angesprochen fühlen (ein getroffener Hund bellt!) und ich als „kanz kanz pöse“ deklariert werde… hihi

Ausserdem sind „100% präzise“ und „Computer“ Dinge, die sich gegenseitig ausschliessen, das mal so nebenbei angemerkt… aber selbst das hättest du wissen müssen
(zugegeben, man muss ein bisken Erfahrung in Sachen Elektrotechnik haben um sowas zu wissen, darum gehts hier aber auch ned)

Ah ja -.-
Zur Information bin ich nicht allwissend, und theoretisch würde das System klappten, wenn der USer Javascript aktiviert hat und nicht zu viele User online sind und der Zugriff auf die Datenbank zu stark ist.

ein „unsichtbarer“ frame der sehr oft refrshed und nichts anderes macht als eine sinnlose anfrage an den server zu schicken, damit der die IP prüfen und checken kann wieviele user online sind würde zwar eine hässliche lösung sein, aber könnte funktionieren.

wenn ich den browser schliesse, dann sendet dein JS ja keine anfrage mehr und deine lösung wäre auch ned exakt, oder arbeitet das JS die funktion ab?

müsste er doch theoretisch, wenn die Anfrage auf die Datenbank nicht zu lange dauert -.-

onUnload wird auch abgearbeitet, wenn man den Browser schließt.

PS.:
Deine Lösung funktioniert, ich habe so mal bei einem Chat gearbeitet. Es geht Problemlos

das PRoblem ist, dass in der Datenbank bei mir dann immer noch die ip von mir steht -.-

Also um euch Freunde der nacht mal aufzuklären:

Ihr benutzt Scriptsprachen, die entweder serverside oder clientside sind, sprich ihr habt absolut keine Möglicheit, eine bidirektionale Kommunikation herzustellen, welche aber für diese Aufgabe zwingende Vorraussetzung ist!
Kommt mir jetzt bloss nicht mit Ajax, denn das is nix anderes als ein Riesenhaufen Javascript, also clientside.

Versteht ihr jetzt endlich dad grundlegende Problem? Ihr KÖNNT diese Aufgabe garnicht lösen. Man könnte jetzt eine Pseudo-2-Wege-Kommunikation aufbauen, indem eine Seite (zb. der Client) ständig Daten schickt bzw. irgendetwas abfragt … das ist aber eine sehr hässliche, unsaubere und zudem auch unsichere, instabile Lösung. Solchen Code sollte man NIE einsetzen, denn das ist das Handwerk von Spaghettiprogrammierern, zulande auch „Scriptkiddies“ genannt. Solch ein Code lässt die komplette Branche in Verruf geraten und sorgt immer wieder für graue Haare bei Programmierern, die das dann wieder ausbügeln müssen.

Wenn du diese Aufgabe wirklich lösen willst (anstatt das Problem zu umgehen), dann benutze eine Programmiersprache (und keine Scriptsprache), wie zb. Java oder sogar C.

Bitte nimm Java und c++ aus deiner Signatur raus, offensichtlich weisst du nichtmal was das alles überhaupt ist
(deutlich erkennbar an den Überschriften :-D)
Hättest du tatsächlich ein wenig Einsicht in diese Hochsprachen, dann wäre der komplette Thread für dich überflüssig. Man sollte nicht mit nicht-vorhandenen Fähigkeiten prahlen, das kann nach hinten losgehen

So, und um dir für die Zukunft ein wenig Wissen mitzugeben, und dich hoffentlich von der Spaghettie-Schiene abzubringen:

Maschinencode (0010100100 usw.) :arrow: maschinennaher Code (zb. Assembler) :arrow: Hochsprachen bzw. Programmiersprachen :arrow: Interpretersprachen / Scriptsprachen

umso tiefer man in dieser Struktur geht (nach links also), umso mehr Funktionalität steht zur Verfügung bzw. umso schneller + besser lassen sich Aufgaben erledigen. Wenn man sich mehr nach rechts wendet, dann ist zwar der eigentliche Aufwand sehr klein, aber die Verarbeitungsgeschwindigkeit der Maschine nimmt exponentiell ab (weil: exponentiell mehr Rechenschritte / Befehl) und man hat weniger Funktionen

tja - doch das geht - nur nicht gut ^^
siehe hier - hab ich gemacht - ist zwar eine morz systemanforderung an client und server - aber es geht

http://www.ts-onlyfree.de/ocp/chat/

btw GRABSCHÄNDUNG

[COLOR=„Red“]CLOSED