ERLEDIGT
NEIN
NEIN
ANTWORTEN
10
10
ZUGRIFFE
558
558
EMPFEHLEN
-
14.06.06 00:30 #1
- Registriert seit
- Dec 2004
- Ort
- Lehrte bei Hannover
- Beiträge
- 435
Kann man mittels PHP irgendwie auf alle Sessions (sämtlicher eingeloggten User) zugreifen? Ich möchte ein Who is Online Script schrieben und kann mir nicht vorstellen wie man das sonst machen sollte. Ich könnte ja sonst z.B. Beim einloggen in einer DB eine wert "online" auf 1 setzen und beim logout auf 0. Wenn man sich nicht ausloggt könnte ich per Cronjob alle 5 Minuten auf 0 setzen lassen, aber woher soll der Cronjob wissen wer momentan online ist, denn "online" würde ja dan nur beim Login auf 1 gesetzt?Man könnte es auch beim klicken jedes Links auf 1 setzen lassen aber das find ich ehrlich gesagt zu umständlich. Also geht das mit den Sessions?
-
Die Standardsicherungsmethode der Sitzungsvariablen ist dateibasiert, wobei die Sitzungsdateien im bestimmten Verzeichnis (siehe session.save_path-Konfigurationsoption) gespeichert werden. Wenn du auf dieses Verzeichnis Zugriff hast, könntest du die enthaltenen Dateien einfach auslesen und so die Benutzer ermitteln.
Alternativ könntest du auch eine eigene, vielleicht datenbankgestützte Sitzungsverwaltung nehmen. Damit wäre eine Abfrage noch einfacher.Markus Wulftange
-
Online-Anzeigen sind, da es sich bei HTTP um ein verbindungsloses Protokoll handelt, ohnehin nicht so recht genau, aber das ist dir wahrscheinlich bewußt
.
Du erzeugst doch sicher für jeden Benutzer, der auf deine Seiten kommt eine Session. Also sicherst du bei jeder neuen Session entsprechende SID + Timestamp in einer Tabelle.
Wenn also jemand ne Seite anforderst, checkst du zuerst, ob es einen Eintrag mit der aktuellen Session id in deiner Tabelle gibt. Wenn ja, updatest du den Timestamp des Eintrages auf die aktuelle Zeit - wenn nicht legst du nen neuen Eintrag mit SID und Timestamp an. Loggt sich ein User ein, kannst du entsprechenden Eintrag sofort entfernen. Ansonsten mit nem Cronjob regelmäßig Einträge kicken bzw. bei jedem Aufruf einer beliebigen Seite.
-
14.06.06 00:55 #4
- Registriert seit
- Dec 2004
- Ort
- Lehrte bei Hannover
- Beiträge
- 435
Diese Funktion ist ja sehr kompliziert. Gibt es vielleicht ein Tutorial, welches sich mit diesem Thema in einem anderen Zusammenhang oder gegebenenfalls sogar im gleichen Zusammenhang beschäftigt? Habe eben ne kleine Runde damit gegoogelt, aber es kommen nur Standart Tuts, in denen der Befehl "zufällig" erwähnt wird.
-
14.06.06 01:14 #5
- Registriert seit
- Dec 2004
- Ort
- Lehrte bei Hannover
- Beiträge
- 435
Habe jetzt dieses Tutorial bei euch entdeckt: http://www.tutorials.de/forum/php-co...n-thewolf.html Verstehe jedoch nicht, woher er die onlinetime nimmt (300 sek) woher will man den nwissen wie lang jemand online ist, oder verstehe ich den inhalt der variable falsch?
-
Naja...bei jeder Aktion(jedem Aufruf einer Seite) wird ein aktueller Timestamp in die DB geschrieben.
Diese 300 Sekunden bedeuten nicht, dass derjenige 300 Sekunden online ist, sondern dass er vom Skript als Offlline angesehen wird, wenn er in den letzen 300Sekunden keine Seite aufgerufen hat.
Den Wert kannst du ja nach Gusto ändern.
-
14.06.06 03:57 #7
- Registriert seit
- Dec 2004
- Ort
- Lehrte bei Hannover
- Beiträge
- 435
Achso hab jetzt gar nicht gesehen, dass man da auch mit jedem Link den timestamp aktualisieren muss, dann hat sich es ja schon wieder gegessen und meine frage davor ist wieder aktuell.
-
Wenn Du die UserID in der Session speicherst kannst Du das Verzeichnis mit den Session-Files durchgehen und aus allen Session-Files die UserID auslesen. Diese kannst Du dann durch eine DB-Abfrage einem Usernamen zuordnen.
Uebrigens, ich wuerde empfehlen bei dieser Aktion gleich selbst zu ueberpruefen ob die Zeit von 5 oder 10 Minuten bereits verstrichen ist und die Datei gegebenenfalls loeschen. Der Garbage Collector von PHP loescht die Datei naemlich nicht gleich sobald sie abgelaufen ist sondern kann auch schonmal eine Weile warten bevor er dann wieder zuschlaegt.PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
__________________
EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
__________________
__________________Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
Zitat von Friedrich Nietzsche
-
14.06.06 04:44 #9
- Registriert seit
- Dec 2004
- Ort
- Lehrte bei Hannover
- Beiträge
- 435
Joa, aber wie derser Zugriff auf die Session files funktioniert habe ich nicht verstanden. Generell habe ich zugriff auf alles aufm Server.
-
Mittels session_save_path() kannst Du den Pfad aendern wo die Sessions gespeichert sind.
Das kann z.B. auf Systemen wichtig sein die Du Dir mit anderen teilst, im Grunde halt bei jedem Hoster. Weiterhin baeugt dies Zugriffs-Problemen vor, denn es koennte sein, dass der SafeMode verhindert, dass Du auf /tmp (wo normalerweise die Session-Files liegen) nicht zugreifen kannst.
Anschliessend durchsuchst Du das Verzeichnis nach Dateien, ueberpruefst den Zeitpunkt der letzten Aenderung. Falls zu alt -> loeschen, ansonsten -> UserID auslesen.
Hier mal der Code von meinem Garbage-Collector:
Hier werden die Sessions auch in der DB festgehalten, das hat den Vorteil, dass Du den Zeitpunkt des letzten Logins und des letzten Logouts (ob nun manuell oder automatisch nach Ablauf der Session) festhalten kannst.Code php:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
<?php $session_prefix="sess_"; $sessions=mysql_query("select * from sessions",$mydb); while ($session=mysql_fetch_assoc($sessions)) { if (file_exists($session_path."/".$session_prefix.$session['sessionid'])) { if (filectime($session_path."/".$session_prefix.$session['sessionid'])+600<time()) { unlink($session_path."/".$session_prefix.$session['sessionid']); } } if (!file_exists($session_path."/".$session_prefix.$session['sessionid'])) { if ($session['userid']!="0") { $logouttime=time(); mysql_query("update users set lastseen='".$logouttime."',logintime='' where id='".$session['userid']."'",$mydb); } mysql_query("delete from sessions where sessionid='".$session['sessionid']."'",$mydb); } } ?>
PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
__________________
EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
__________________
__________________Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
Zitat von Friedrich Nietzsche
-
Protokolliere lieber selbst die Aktionen der Benutzer in einer Datenbank anstatt an den Sitzungsdateien herumzufummeln. Das ist nicht nur einfacher sondern kann dich auch vor unwiderruflichen Aktionen wie dem ungewollten Löschen von Sitzungsdateien bewahren.
Markus Wulftange
Ähnliche Themen
-
Von PHP auf Java HTTP Sessions zugreifen und umgekehrt
Von Thomas Darimont im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 0Letzter Beitrag: 14.09.08, 13:06 -
ICEFACES, JSF, Zugriff auf alle Sessions?
Von WolfBauer im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 16.01.08, 03:23 -
Alle Sessions ermitteln ?!
Von Grunge im Forum PHPAntworten: 15Letzter Beitrag: 12.02.06, 13:50 -
Sessions/MySql: Online Abfrage
Von Shinzo im Forum PHPAntworten: 2Letzter Beitrag: 04.01.04, 15:06 -
Online Block mit Sessions?!
Von NightWatcher im Forum PHPAntworten: 3Letzter Beitrag: 18.12.03, 14:44





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren