Druckversion des Themas

Hier klicken um das Topic im Orginalformat anzusehen

HTML-Editor phase 5 Support _ HTML _ User Online

Geschrieben von: adoplin 17.05.2006 - 13:01

Hallo

Meine Frage:

Wie kann ich anzeigen lassen, wieviele User/Leute auf meiner Homepage rumstöbern??
Geht das irgendwie mit PHP??

Grüße

Geschrieben von: Andreas 17.05.2006 - 13:05

ZITAT(adoplin @ 17.05.2006 - 14:01) *
Wie kann ich anzeigen lassen, wieviele User/Leute auf meiner Homepage rumstöbern??

Kurz: nein.

Lang: ja, dafür gibt es vorgefertigte (u.a. auch PHP) Scripte, die versuchen aus den Logs oder mittels Counter mehr oder weniger genau und sinnvoll zu erraten, wieviele Leute gerade auf Deiner Seite Online sind.

Am einfachsten wird es für Dich sein, einen externen Code einzubinden. Auf meiner Seite (Siehe Signatur) kannst Du sowas "bewundern". Allzuviel würde ich diese Information aber nicht hineininterpretieren ...

Gruß

Andreas

Geschrieben von: Auge 17.05.2006 - 23:28

Hallo

ZITAT(Andreas @ 17.05.2006 - 14:05) *
Kurz: nein.

Lang: ja, ...

Schön gesagt. *hehehe*

@adoplin:

Solche Skripte zählen die Zugriffe in einem bestimmten Zeitraum. Aufgrund der Architektur des für Webseiten verwandten Protokolls (HTTP) ist das aber strenggenommen nicht möglich. Anders als z.B. bei einem Chat, bei dem eine permanente Verbindung zwischen deinem Programm und dem Server besteht, kommt bei HTTP eine Verbindung nur in dem Moment zustande, wenn du z.B. beim Anklicken eines Links eine neue Seite anforderst. Dann wird, so vorhanden, diese Seite ausgeliefert. Fordert der Browser ein Bild, welches im HTML-Quelltext referenziert ist, an, ist dies schon eine neue Verbindung. Jede dieser Verbindungen wird nach der Auslieferung der angeforderten Ressource (Datei) aber wieder getrennt.

Fachchinesisch nennt man ein Protokoll, das so arbeitet, zustandslos.

Ob du nun 10 Minuten lang die Seite, die sich jetzt in deinem RAM befindet, liest, nach einer halben Minute eine andere Seite anforderst, weil du nicht gefunden hast, wonach du suchtest oder ob du gar den Browser schließt, kann von Seiten des Servers nicht festgestellt werden. "Er" weiß also nicht, ob du noch auf dieser Seite bist.

Die von Andreas angesprochenen Skripte nehmen somit nur eine Schätzung[1] aufgrund der Aufrufe der Seite der letzten x Minuten vor. Wenn du wirklich wissen willst, wieviele Leute deine Seite in einem bestimmten Zeitraum besucht haben, werte die Logdateien aus. Die meisten Hoster bieten dir schon eine Aufarbeitung derselben an. Einzelheiten dazu wirst du (höchstwahrscheinlich) in den FAQs deines Hosters finden.

[1] Darauf soll, so denke ich, Andreas' letzter Satz "Allzuviel würde ich diese Information aber nicht hineininterpretieren ..." hinweisen.

Tschö, Auge

Geschrieben von: adoplin 19.05.2006 - 18:03

Hallo!

Also noch ne Frage:

Hab auf meiner Seite n Login.
Ob ma eingeloggt ist oder nicht wird in einer session variable (php) gespeichert. soweit ich weiß, werden diese session-daten solange die session besteht auf den server gestapelt.
gibt es keine möglichkeit, zu überprüfen, wieviele solcher dateien aufm server liegen um damit dann anzuzeigen wieviele leute eingeloggt sind??

Geschrieben von: harlequin 19.05.2006 - 20:32

ZITAT(adoplin @ 19.05.2006 - 19:03) *
Hallo!

Also noch ne Frage:

Hab auf meiner Seite n Login.
Ob ma eingeloggt ist oder nicht wird in einer session variable (php) gespeichert. soweit ich weiß, werden diese session-daten solange die session besteht auf den server gestapelt.
gibt es keine möglichkeit, zu überprüfen, wieviele solcher dateien aufm server liegen um damit dann anzuzeigen wieviele leute eingeloggt sind??


moin!

Eigentlich ja, in Praxis aber eher nicht. Viele Webserver prügeln alle Sessiondaten in ein mehr oder minder globales tmp Verzeichnis. Und da die meisten PHP Anwendungen ihre Sessiondaten nicht selbst wieder löschen (was zwar in Theorie möglich ist, praktisch aber etwas trickreicher...), stapelt sich dort einiges. Und das Verzeichniss dann durchparsen, mit filectime oder ähnlichem die Zeit ermitteln, bewerten ob man die Daten nun nimmt oder nicht, usw. und so fort.

Ein anderer Weg ist es diese Daten weitestgehend in einer Datenbank zu speichern. Dies erleichtert einiges, man kann beispielsweise sehr simpel nach einem Timestamp, den man mitspeichert, solche Daten wie: gerade online, in den letzten 15 min, 24h, etc pp. ermitteln.
Und das Aufräumen macht auch mehr Spaß... smile.gif Wenn man sich dann dazu noch eine IP merkt hat man im Prinzip die Geschichte beisammen.
Es ist zwar nicht wirklich exakt, da viele User beispielsweise über einen Proxy surfen (kommt zB. bei AOL Kunden immer wieder vor), kannst du dort unter Umständen 10 Zugriffe von der gleichen IP in kurzer Zeit haben, die aber von sechs verschiedenen Leuten kommen.
Man könnte dort zwar mit _x_forwarded_for (frag mich nicht nach der genauen Variable, ich tippe grad aus der Hüfte... smile.gif ) versuchen die richtige IP herauszufinden, aber das ist eher ungenau. Denn viele Firmen nutzen auch einen eigenen Proxy - aus verschiedensten Gründen. Die meisten Firmen verwenden dann IPs aus einem privaten Adressbereich (192.168.x.x, 10.x.x.x, 172...... wie auch immer), und weil es so schön bequem ist oft 192.168.0.irgendwas..... mit anderen Worten du hast nicht wirklich eine Chance jemanden ganz genau zu identifizieren, du kannst dich höchstens annähern.
Mit einer Kombination aus IP, User Agent (Browser) und ähnlichen kommst du dann dicht genug an die Wahrheit ran, um diese kleine 'user online' Geschichte halbwegs glaubwürdig umzusetzen. smile.gif

Was ich damit sagen möchte und im Groben schliesse ich mich dabei Andreas und Auge an: Spar dir die Arbeit, wenn du es nicht unbedingt willst, denn brauchen tut so etwas niemand - glaub mir... wink.gif
Es ist eine nette Fingerübung, zugegeben, aber spätestens bei einer Seite, die normalen Traffic hat, sprich mehrere Hits pro Sekunde, permanent irgendwelche Suchmaschinen anwesend, welche die Seite indizieren wird das Ganze knifflig.
Denn dann reichen Sekunden nicht mehr als Maßstab, dann geht es mit der mircotime los. Dann kann man anfangen seinen Code wirklich zu tunen, glaub mir, dann wird es spannend - aber vermutlich nicht so wie du es gerne hast.... wink.gif

Ich nutze die Funktion hier im Forum weil sie bei der Software dabei ist - ich es also nicht selbst coden muss. Wäre sie es nicht, wäre es mir egal.

Aber um dir zu helfen: http://www.hotscripts.com/PHP/Scripts_and_Programs/Counters/Real-Time/index.html gibt es das ein oder andere, brauchbare Skript, auch welche mit 'User Online' Feature. smile.gif Ich habe sie mir nicht angesehen, kann also über die Qualität nichts sagen, probier sie doch einfach mal aus (vorzugsweise auf einem Testsystem, wo es niemanden weh tut.... wink.gif ), aber die Kernaussage bleibt bestehen: Akurat, sprich 100% korrekt kann keines dieser Skripte sein......

have fun!
Lars

Geschrieben von: adoplin 20.05.2006 - 6:28

Hi!

Naja den Stress spar ich mit dann halt dry.gif

Fänds halt schon so ne sidebar, wo alle user die grad im geschützten bereich sind angezeigt werden.

Naja

MfG

Geschrieben von: harlequin 20.05.2006 - 12:09

moin!

Ein kleines Beispiel:

Nimm eine Tabelle (die Tabelle mit den Benutzdaten zB oder eine seperate), dort sollten zwei Spalten, vorzugsweise Typs INT existieren, 'last_login' und 'last_click'. Sobald sich ein Benutzer mit validen Daten angemeldet hat machst du ein

QUELLTEXT
$query = "UPDATE tabellen_name SET last_login='".time()."' WHERE user_id='".$_SESSION['user_id']."'";
$result = mysql_query($query, $wiedeineDBVerbindungauchheissenmag);


Bei einem Klick entsprechend analog:
QUELLTEXT
$query = "UPDATE tabellen_name SET last_click='".time()."' WHERE user_id='".$_SESSION['user_id']."'";
  $result = mysql_query($query, $wiedeineDBVerbindungauchheissenmag);


Nun hast du dort immer den letzten Login und den Zeitpunkt der letzten Aktivität drin und kannst entsprechend deine SELECTs abfeuern:
QUELLTEXT
$vorfuenfzehnminuten = time()-900;
$query = "SELECT user_name FROM tabellen_name WHERE
last_click>='".$vorfuenfzehnminuten."' ORDER BY last_click DESC";
  $result = mysql_query($query, $wiedeineDBVerbindungauchheissenmag);
while ($row = mysql_fetch_assoc($result)) {
    $user_online[] = $row['user_name'];
}
mysql_free_result($result);
// Ausgabe, da solltest du vorher prüfen, ob tatsächlich etwas auszugeben ist.
echo count($user_online).' Benutzer online:<br />';
echo @implode('<br />', $user_online);
// das @ - Zeichen verhindert, dass PHP eine Warnung herausgibt, sollte $user_online leer sein,
// oder garnicht existieren.


Im Prinzip sollte es das sein. Wie gesagt, es ist ein kurzes Beispiel, um dir eine Anregung zu geben. Dies funktioniert natürlich nur mit angemeldeten User, normale Besucher werden nicht berücksichtigt. smile.gif

have fun!
Lars

Geschrieben von: adoplin 20.05.2006 - 16:38

Hi there

THX
Das werde ich dann mal ausprobieren

MfG

Geschrieben von: adoplin 21.05.2006 - 10:03

hallo

Also des funktioniert jetzt zu meiner Zufriedenheit.
Nicht ganz akkurat zwar aber man hat so etwa ne ahnung wer inletzter zeit eingeloggt war.

wie sieht's mit nem hidden frame aus mit nem meta refresch=0 der last_click setzt.
meint ihr das wäre ne möglichkeit, die user die sich nicht ausloggen dennoch aus der user_online liste zu kriegen??

grüße

Unterstützt von Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)