Wie lösen wenn nicht ausgeloggt
lachesis
- php
0 Ole0 norbert =:-)0 lachesis
Hallo zusammen,
ich möchte per php und mysql mitschreiben, wie lange jemand in meinem Userbereich eingeloggt war. Dazu speichere ich seine id, seine Start und Stopzeit.
Solange sich derjenige ordentlich ausloggt klappt das ganze wunderbar, aber wie löse ich das ganze wenn jemand simpel den Browser schließt?
Ich steh da n bißl aufm Schlauch und hab nicht mal ne Idee wie ich das lösen könnte.
THX
hi
Ich steh da n bißl aufm Schlauch und hab nicht mal ne Idee wie ich das lösen könnte.
du rufst onunload eine datei auf die den user ausloggt.
da gibts zwar noch das eine oder andere zu beachten, aber im prinzip würde das dein problem lösen.
z.B. zu beachten: wird das fenster geschlossen, oder einfach nur eine andere eigene seite angesteuert
lösung: das ganze in einem übergeordneten frameset laufen lassen und dort den onunload einbetten.
so long
ole
(8-)>
du rufst onunload eine datei auf die den user ausloggt.
Soweit ich weiß funktioniert onunload aber nicht bei mozilla/netscape.
Hallo,
ich hab mir überlegt, dass ich immer die session id mitlogge und bei einem neuen Aufruf der php Datei checke ob die ses id noch existiert. wenn ja dann soll das script nix tun, denn der User ist ja noch online.
Wenn nein, soll er die die Stopzeit setzen.
Bloß.... öhm wie krieg ich raus ob die Session noch existiert?
THX
hi
Ich steh da n bißl aufm Schlauch und hab nicht mal ne Idee wie ich das lösen könnte.
du rufst onunload eine datei auf die den user ausloggt.
Hallo lachesis,
zu Deinem Problem gibt es lange Threads im Archiv. Da HTTP ein zustandsloses Protokoll ist, hast Du keine sichere Möglichkeit festzustellen, wann der Nutzer Deine Seite verlässt.
Lesenswert dazu:
http://www.php-faq.de/q/q-code-user-online.html
http://www.php-faq.de/q/q-phplib-reloads.html
Ich habe in meiner Session zwei Werte, wann die Session begonnen wurde, und wann der User das letzte mal etwas gemacht hat, also eine Seite aufgerufen hat. Da bei mir im Script nicht viel am Stück zu lesen ist, habe ich einfach festgelegt, dass nach 5 Minuten Inaktivität die Session verfällt.
--8<----*snipp*---->8---
session_start();
isset( $_SESSION['sess_start'] ) ? NULL : $_SESSION['sess_start'] = time(); # Session eroeffnet wann?
isset( $_SESSION['sess_last_use'] ) ? NULL : $_SESSION['sess_last_use'] = time(); # Letzte Verwendung
if( $_SESSION['sess_last_use'] + (5 * 60) < time() ) { # Session verfällt fuenf Minuten nach letzter Nutzung
$this->debug( 'info', 'Session verfallen' );
--8<----*snipp*---->8---
} else {
$_SESSION['sess_last_use'] = time();
} # end of if( $_SESSION['sess_last_use'] + (5 * 60) < time() )
--8<----*snipp*---->8---
Gruss, Thoralf
Hallo lachesis!
So wie ich das sehe, gibt es dazu keine "saubere" Lösung - das Schliessen des Browserfensters kann nur per JavaScript abgefragt werden - und das muss bekanntlich nicht immer aktiviert sein.
Stattdessen würde ich bei jedem Zugriff den Eintrag zum Benutzer adaptieren - geht aber ein wenig auf die Resourcen. Wenn der Benutzer das Fenster schließt, hast Du die Zeit des letzten Zugriffs - wenn er sich ordnungsgemäß auslogged natürlich auch.
Bleibt die Frage, ob der Aufwand lohnt, bei jedem Seitenzugriff den Wert zu speichern.
mfg
norbert =:-)
Hallo,
genau das ist mein Problem!
Das ganze wird wohl etwas auf die Performance drücken, wenn ich bei jeder aktion den Wert speichern will
Mein letzter Versuch:
Kann ich nicht evtl checken, ob die Session Datei noch existiert?
Tut sie das nicht mehr und in meiner Tabelle steht der User noch als eingeloggt (er hat also einfach den Browser geschlossen und seine Session wurde wegen timeout gekillt) könnte ich ihn doch auch in der Tabelle als ausgeloggt markieren und ihm... ja irgendeine Nutzungszeit zuweisen....
THX
Bleibt die Frage, ob der Aufwand lohnt, bei jedem Seitenzugriff den Wert zu speichern.
mfg
norbert =:-)
Hallo lachesis!
Natürlich könntest du das - wo die Sessions gespeichert werden, hast Du in php konfiguriert. Allerdings: Wie möchtest Du das abfragen? Solange der Benutzer aktiv ist und klickt, ist alles ok. Wenn er nicht mehr auf deiner Site surft UND das Session-Timeout überschritten ist, gibt es die entsprechende Datei nicht mehr. Aber wann fragst Du ab (php läuft in der Regel nur, wenn ein HTTP-Request erfolgt - und nicht kontinuierlich im Hintergrund oder wenn eine Datei gelöscht wird)? Der Benutzer greift ja nicht mehr zu und kann daher auch keine Aktion starten - und wenn zufällig zwei Tage lang niemand anderer auf die Seite zugreift, ist der erste mögliche Anstoss für eine Eintragung in die DB einfach falsch - diese Statistik ist dann genau so gut wie keine.
Dann würde ich schon eher die von mir vorgeschlagene Variante nehmen - ein DB-Update pro Seite sollte nicht besonders auffallen - und wenn du entsprechende Zugriffszahlen hast, brauchst Du ohnehin einen entsprechenden Server!
mfg
norbert =:-)