| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

16-12-2008, 18:46
|
|
Seikilos
Registrierter Benutzer
|
|
Registriert seit: May 2003
Ort: Vor meinem Computer
Beiträge: 494
|
|
User Online Status
Ich hab schon diverse Threads darüber gelesen, dass man den timestamp eines users loggt und guckt, wie alt der Timestamp ist, aber ich frage mich, ob es andere Lösungen für das Thema gibt.
Wenn ich eine Session erzeuge, so bleibt diese ja nur solange bestehen, bis der Browser geschlossen wird (default)
Kann man Serverseitig irgendwie überprüfen, ob eine bestimmte Session existiert?
Die Idee wäre, die Session Id des Users in einer DB zu speichern, prüft man dann eine Session, ob diese existiert, so würde man rausbekommen, ob der User noch da ist.
Ich vermute jedoch, dass dies nicht klappt, da ich so quasi aus einer Session eine andere "anpingen" muss. Sehe ich das richtig?
|

16-12-2008, 18:58
|
|
medium22
Registrierter Benutzer
|
|
Registriert seit: Mar 2006
Beiträge: 306
|
|
Warum so kompliziert?
Wenn Du die SessionID in einer Datenbank speicherst brauchst Du diese doch nicht anpingen o.ä. Einfach mittels einer Funktion abfragen ob dieser User mit der gespeicherten SessionID online ist. Wenn nein, dann hat er den Browser geschlossen oder sich ausgeloggt, wenn ja, dann ist er noch immer eingeloggt.
Bsp:
PHP-Code:
function logged_in()
{
$sql="SELECT UserId
FROM tabelle
WHERE UserSession='".session_id()."'
LIMIT 1";
$result= mysql_query($sql);
return ( mysql_num_rows($result)==1);
}
In Deinen Seiten (die wohl durch PW/LogIn o.ä. geschützt sind) dann einfach nur noch jeweils
PHP-Code:
if (!logged_in()) {
echo "<A HREF=\"index.php\">Hier</A> klicken, um auf die Hauptseite zu kommen<BR />\n";
}
else {
echo "INHALT...";
}
Wichtig hierbei ist allerdings das jede Datei ein
PHP-Code:
@session_start();
zu beginn enthält..
Oder habe ich Dich nun komplett falsch verstanden?
|

16-12-2008, 19:02
|
|
Seikilos
Registrierter Benutzer
|
|
Registriert seit: May 2003
Ort: Vor meinem Computer
Beiträge: 494
|
|
Wie prüft man die Session?
|

16-12-2008, 19:16
|
|
medium22
Registrierter Benutzer
|
|
Registriert seit: Mar 2006
Beiträge: 306
|
|
|

16-12-2008, 19:16
|
|
Seikilos
Registrierter Benutzer
|
|
Registriert seit: May 2003
Ort: Vor meinem Computer
Beiträge: 494
|
|
Danke, für den Tipp und wie prüft man die? isset wird kaum funktionieren
|

16-12-2008, 19:30
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.308
|
|
empty?
peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

16-12-2008, 19:40
|
|
Seikilos
Registrierter Benutzer
|
|
Registriert seit: May 2003
Ort: Vor meinem Computer
Beiträge: 494
|
|
Die frage ist ja, geht dies für sessions, die eigentlich nicht mir als besucher gehören? Hat das jemand getestet? Ich meine da kommt immer false raus, außer man ist die session selbst, weil eben lokal geprüft wird
|

16-12-2008, 19:43
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Zitat:
|
Ich hab schon diverse Threads darüber gelesen, dass man den timestamp eines users loggt und guckt, wie alt der Timestamp ist, aber ich frage mich, ob es andere Lösungen für das Thema gibt.
|
Ich sehe keine andere Methode!
|

16-12-2008, 20:07
|
|
Seikilos
Registrierter Benutzer
|
|
Registriert seit: May 2003
Ort: Vor meinem Computer
Beiträge: 494
|
|
Schade, die idee fand ich eigentlich witzig
|

16-12-2008, 20:11
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Irrwege
Bei einer naiven Herangehensweise könnte man auf einige falsche Ideen kommen.
online=1 : Der Gedanke:
Bei dem Login des Users setze ich in der Usertabelle, bei dem User ein Flag "Online" auf 1 oder True. Und beim Logout auf 0 oder False.
Das klappt so nicht, weil:
Beim testen, scheint noch alles OK zu sein. Aber in der Praxis zeigt sich ganz schnell, dass ettliche User sich nicht ausloggen. Also einfach den Browser schließen. Auch Netzwerkabbrüche, Stromausfälle usw. bekommen wir damit nicht in den Griff. Auf Dauer werden sich so viele User ansammeln, welche unser Flag auf 1 stehen haben, aber schon seit Stunden weg sind.
Sessiondaten: Der Gedanke:
Ist doch ganz einfach, ich schaue in dem Ordner nach, wo die ganzen Sessiondateien liegen. Alle Dateien zählen, dann weiß ich die Anzahl der Besucher. Und mit unserialize, komme ich sogar an die Namen.
Das klappt so nicht, weil:
Nunja, evtl ist man nicht alleine auf dem Server! Schlimmsten falls muß man sich den Tempordner mit vielen anderen Domaininhabern teilen. Soll man deren Sessions auch mitzählen, lesen und untersuchen? Nein! Das verbietet sich.
Evtl ist das PHP auch durch den "Suhosin hardening patch" geschützt. Dann wirds schwer/unmöglich die Sessiondaten auszulesen, weil dieser die Daten verschlüsselt.
Zur guter Letzt:
Die Sessionverwaltung löscht abgelaufene Sessions nicht unbedingt sofort. Einstellbar in der php.ini. Auch ist das Auslesegedöns recht lahmarschig, also ein Klotz am Bein.
IP / SessionID merken
Der Gedanke:
Jagut, dann lege ich eben dafür eine extra Tabelle an! Dort merke ich mir die SessionID oder die IP Adresse und den Zeitpunkt des letzten Zugriffs.
Das klappt so nicht, weil:
Es ist sinnvoll die SessionID häufiger mal zu wechseln. Selbst die IP ist nicht sonderlich zuverlässig. Auch sammeln sich in der Tabelle, im laufe der Jahre, viele Einträge an, die völlig sinnlos sind, weil abgelaufen.
|

16-12-2008, 20:25
|
|
Seikilos
Registrierter Benutzer
|
|
Registriert seit: May 2003
Ort: Vor meinem Computer
Beiträge: 494
|
|
Zitat:
IP / SessionID merken
Der Gedanke:
Jagut, dann lege ich eben dafür eine extra Tabelle an! Dort merke ich mir die SessionID oder die IP Adresse und den Zeitpunkt des letzten Zugriffs.
Das klappt so nicht, weil:
Es ist sinnvoll die SessionID häufiger mal zu wechseln. Selbst die IP ist nicht sonderlich zuverlässig. Auch sammeln sich in der Tabelle, im laufe der Jahre, viele Einträge an, die völlig sinnlos sind, weil abgelaufen. [/B]
|
Wieso im detail? Der Rest war mir klar, weil HTTP ein Zustandloses Protokoll ist.
Aber wenn ich registrierte User habe, so kann ich sessions mit dem usernamen verbinden und aktualisieren. Zu alte Einträge kann ich immernoch säubern.
Ferner nutze ich ein Framework, da gehe ich nicht von aus, dass der User die Session pro Session wechselt.
Es feht halt nur der Haken, die Sessionaktivität zu bestimmen.
Wir reden hier von einem root, keinem Shared Webspace, dh um fremde Sessions muss ich mir keine Gedanken machen
|

16-12-2008, 20:30
|
|
PHP-Desaster
PHP Expert
|
|
Registriert seit: Mar 2006
Beiträge: 3.104
|
|
Du kannst auch über session_set_save_handler deinen eigenen Handler für die Sessiondaten schreiben, der diese zum Beispiel mit einem Zeitstempel in die Datenbank schreibt. Mit Hilfe dieser kannst du dann nachzählen, wie viele Sessions zum Beispiel die letzten 5 Minuten aktualisiert wurden. In den Usernotes sind zum Beispiel DB-Handler vorhanden.
|

16-12-2008, 20:31
|
|
Seikilos
Registrierter Benutzer
|
|
Registriert seit: May 2003
Ort: Vor meinem Computer
Beiträge: 494
|
|
Das war mir bewusst, aber diese Lösung ist ja nicht viel anders, als einen normalen Timestamp mitzuschleppen
|

16-12-2008, 20:37
|
|
PHP-Desaster
PHP Expert
|
|
Registriert seit: Mar 2006
Beiträge: 3.104
|
|
Da ist nur die Frage, wie du von einer Session auf die anderen zugreifen willst? combie hat das ja bereits illustriert, das Verzeichnis auslesen ist ja nicht so clever. Das Problem verlagert sich hier in die Datenbank, wodurch du gezielt auf den Zeitpunkt der letzten Änderung zugreifen kannst.
|

16-12-2008, 20:39
|
|
Seikilos
Registrierter Benutzer
|
|
Registriert seit: May 2003
Ort: Vor meinem Computer
Beiträge: 494
|
|
Stimmt schon, wobei dies nichtmal notwendig ist, der User hat einen Einzelnen einstiegspunkt, dort kann ich das Session updaten integrieren, ohne selbst an der PHP Mechanik zu werkeln.
Nun ja, danke
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|