login system, herausfinden wer/wie viele online sind
oli
- php
Hallo,
Ich habe mein Loginsystem mit session_start(); gemacht, also sobald sich jemand einlogt schreibe ich seine Dateien in $_SESSION[...] rein.
Mich würde jetzt interessieren, wie ich 1. schauen kann, wer bzw wie viele gerade eingelogt sind.
und 2. wie könnte ich nach z.B. 2 Stunden jemanden automatisch auslogen?
lg
Mich würde jetzt interessieren, wie ich 1. schauen kann, wer bzw wie viele gerade eingelogt sind.
speicher die sessions bei jeder änderung in eine datenbank/tabelle und lese dort alle aus, die innerhalb der sagen wir letzten 10 minuten etwas geändert haben
und 2. wie könnte ich nach z.B. 2 Stunden jemanden automatisch auslogen?
stelle das session-limit auf 2 stunden
Hello,
Mich würde jetzt interessieren, wie ich 1. schauen kann, wer bzw wie viele gerade eingelogt sind.
speicher die sessions bei jeder änderung in eine datenbank/tabelle und lese dort alle aus, die innerhalb der sagen wir letzten 10 minuten etwas geändert habenund 2. wie könnte ich nach z.B. 2 Stunden jemanden automatisch auslogen?
stelle das session-limit auf 2 stunden
Ich nehme jetzt mal an, dass Du session.max_lifetime damit meinst.
Aber das ist nicht gut. Session.max_lifetime gilt für alle Sessions des betroffenen Verzeichnisses.
Die existenz einer gültigen Sessiondatei hat mit dem "Anmeldestatus" nichts zu tun. Der sollte über einen eigenen Mechanismus gesteuert werden. Der ist am besten in der und um die Datenbank herum abgesiedelt. Dann ist die maximale requestfreie Loginzeit auch für jeden User einzeln steuerbar.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg
Die existenz einer gültigen Sessiondatei hat mit dem "Anmeldestatus" nichts zu tun. Der sollte über einen eigenen Mechanismus gesteuert werden. Der ist am besten in der und um die Datenbank herum abgesiedelt. Dann ist die maximale requestfreie Loginzeit auch für jeden User einzeln steuerbar.
jo, eine entsprechende session-datenbank ist nicht zu verachten - ich fürchte ich bin session-seitig etwas durch asp/vb/iis etwas verwöhnt ;) da ist das handling von sessions teilweise etwas angenehmer
Hello,
Die existenz einer gültigen Sessiondatei hat mit dem "Anmeldestatus" nichts zu tun. Der sollte über einen eigenen Mechanismus gesteuert werden. Der ist am besten in der und um die Datenbank herum abgesiedelt. Dann ist die maximale requestfreie Loginzeit auch für jeden User einzeln steuerbar.
jo, eine entsprechende session-datenbank ist nicht zu verachten - ich fürchte ich bin session-seitig etwas durch asp/vb/iis etwas verwöhnt ;) da ist das handling von sessions teilweise etwas angenehmer
Da kämpfe ich mich die nächsten Tage noch durch. Bisher gibt es nur "Viewstates"...
Aber wir werden schon noch mit Sessions basteln.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg
echo $begrüßung;
[ASP.NET]
Da kämpfe ich mich die nächsten Tage noch durch. Bisher gibt es nur "Viewstates"...
Aber wir werden schon noch mit Sessions basteln.
Grad wollte ich schreiben, dass der ViewState ASP.NETs Konzept zur Persistierung von Daten ist, doch beim Recherchieren stieß ich auf die Seite ASP.NET State Management Recommendations, die noch ein paar mehr Methoden auflistet und bewertet.
echo "$verabschiedung $name";
Hello,
[ASP.NET]
Da kämpfe ich mich die nächsten Tage noch durch. Bisher gibt es nur "Viewstates"...
Aber wir werden schon noch mit Sessions basteln.Grad wollte ich schreiben, dass der ViewState ASP.NETs Konzept zur Persistierung von Daten ist, doch beim Recherchieren stieß ich auf die Seite ASP.NET State Management Recommendations, die noch ein paar mehr Methoden auflistet und bewertet.
Das wäre sonst auch traurig, denn Viewstate ist ja nur eine "etwas sicherere" clientseitige Methode, um mit Statusinformationen (Daten) Ping-Pong zu spielen. Der Vorteil ist, dass jedes Formular (jedes Fenster) seinen eigenen Viewstate mitführt, Der Nachteil ist aber, dass jedes Fenster (jedes Formular) einen eigenen (isolierten) Viewstate haben kann.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg
Hallo,
Ich habe mein Loginsystem mit session_start(); gemacht, also sobald sich jemand einlogt schreibe ich seine Dateien in $_SESSION[...] rein.
Mich würde jetzt interessieren, wie ich 1. schauen kann, wer bzw wie viele gerade eingelogt sind.
das ist meines wissens nur möglich, wenn du eine datenbank benutzt da du ja nicht die sessions bei anderen auslesen kannst.
und 2. wie könnte ich nach z.B. 2 Stunden jemanden automatisch auslogen?
du kannst für die session ein zeit limit setzten und sobald das ausläuft ist di person ausgeloggt.
Gruß,
Tim
Hello,
Ich habe mein Loginsystem mit session_start(); gemacht, also sobald sich jemand einlogt schreibe ich seine Dateien in $_SESSION[...] rein.
Mich würde jetzt interessieren, wie ich 1. schauen kann, wer bzw wie viele gerade eingelogt sind.
das ist meines wissens nur möglich, wenn du eine datenbank benutzt da du ja nicht die sessions bei anderen auslesen kannst.
Da bringst Du etwas durcheinander.
Wenn die Sessions alle zu einem Projekt (vereinfacht einer Domain) gehören, dann können die auch alle mittels der zum Projekt gehörenden Scripte ausgelesen werden. Die laufen ja alle unter demselben User, dem auch die Session zugeordnet sind.
Trotzdem ist eine Datenbank für die Verwaltung des "Anmeldestatus" besser geeignet.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg
Hallo,
das ist meines wissens nur möglich, wenn du eine datenbank benutzt da du ja nicht die sessions bei anderen auslesen kannst.
kann man das? sessions werden doch bei jedem user clientseitig gespeichert oder? lasse mich aber auch gerne eines besseren belehren
Gruß,
Tim
Hello,
das ist meines wissens nur möglich, wenn du eine datenbank benutzt da du ja nicht die sessions bei anderen auslesen kannst.
kann man das? sessions werden doch bei jedem user clientseitig gespeichert oder? lasse mich aber auch gerne eines besseren belehren
Die Sessiondaten sollten immer auf dem Server und nicht auf dem Client gespeichert werden. Dass man "Ping-Pong" mit den Daten speilen kann, ist eine andere Sache. Das Problem ist dann allerdings, dass der Client über unterschiedliche Zustandsdatenpakete zur selben Zeit verfügen kann. Schon deshalb ist es also besser, die Sessiondaten nur auf dem Server zu speichern. Dann kann man sicherstellen, dass alle Sessiondaten eines Clients an einer Stelle zusammengeführt werden.
Außerdem erhöht das die Sicherheit und vermindert den Traffic.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg
Also danke für die Antworten.
Ich habe es nicht gesagt, aber natürlich schreibe ich die Daten auch in eine DB, also Zeit des Logins, und Anzahl der Logins. (Ich habe auch eine "gesperrt" Variable für jeden user)
Soweit ich diesen Link verstanden habe, kann ich es so verwirklichen, indem ich einfach auf die Einlog Zeit schaue, und nach 2 Stunden eine Varible auf gesperrt setze, welche auf jeder Seite überprüft wird, und welche sich erst beim nächsten login wieder entsperrt.
So kann ich aber nur schauen, wer in den letzten 2 Stunden online war, aber ob der noch online ist, kann ich nicht mit Sicherheit sagen, wenn er sich nicht auslogt, oder.
lg
Hello,
So kann ich aber nur schauen, wer in den letzten 2 Stunden online war, aber ob der noch online ist, kann ich nicht mit Sicherheit sagen, wenn er sich nicht auslogt, oder.
Das mit der Spalte in der Tabelle, die "Login" kennzeichnet, ist schon ok.
Genauso kannst Du eine Spalte führen, die den Loginzeitpunkt speichert.
Aber zusätzlich führst Du ja eine Spalte "Lastclick" oder "Lastrequest" oder wie immer Du die nennen möchtest, in der der Zeitpunkt des letzten Requests gespeichert wird. Das übernimmt in meinem Beispiel die Funktion "islogged()".
Wenn Du nun also feststellen willst, wer innerhalb der letzten 60 Sekunden einen Request hatte, dann brauchst Du nur diese Spalte abzufragen und wenn Du wissen willst, wer innerhalb der letzten 10 Minuten einen Request hatte, ebenfalls. Usw. Nur der Vergleichswert ist eben immer ein anderer.
Du müsstest also fragen, wer innerhalb des zulässigen Zeitfesnters einen Request hatte und wessen "Login-Flag" noch gesetzt ist.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg
Danke, ich glaube ich habe das Prinzip verstanden, und werde mich gleich ans Werk machen.
lg
Hallo
sessions werden doch bei jedem user clientseitig gespeichert oder? lasse mich aber auch gerne eines besseren belehren
Um Toms Ausführungen zu ergänzen:
Die in der Session enthaltenen Daten (das, was in das/aus dem Array $_SESSION geschrieben und gelesen wird) werden normalerweise auf dem Server gespeichert. Nur die Session-ID wird an den Client übermittelt. Dies geschieht über ein Session Cookie (die ID wird bis zum Ablauf der Browsersitzung beim Benutzer gespeichert) oder durch anhängen der Session-ID an die URLs in den angeforderten Seiten.
Tschö, Auge
Hello,
Ich habe mein Loginsystem mit session_start(); gemacht, also sobald sich jemand einlogt schreibe ich seine Dateien in $_SESSION[...] rein.
Die Session hat nicth direkt etwas mit dem "Anmeldestatus" zu tun. Sie wird nur als Grundlage dafür benutzt. Den Status sollte man aber trotzdem bei jedem Request gegen die aktuelle Datenbanktabelle gegenprüfen. Das hat mehrere Vorteile, u.a., dass man den letzten Request aller Benutzer leicht abfragen kann und so auch feststellen kann, wer innerhalb eines bestimmten Zeitfensters einen request ausgelöst hat (-> "Online"-Anzeige)
Außerdem kann man so den Usern on the Fly Rechte entziehen oder erteilen. Die sind dann nämlich requestbasiert und nicht sessionbasiert.
Mich würde jetzt interessieren, wie ich 1. schauen kann, wer bzw wie viele gerade eingelogt sind.
und 2. wie könnte ich nach z.B. 2 Stunden jemanden automatisch auslogen?
etwas mehr Hintergrund findest Du hier:
http://forum.de.selfhtml.org/archiv/2008/4/t170126/#m1111727
lg
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg