Dizzy Geschrieben 26. Januar 2006 Geschrieben 26. Januar 2006 Hallo, ich habe schon einige Dinge zu dem Thema gelesen, aber keins hat so richtig geholfen. Auf meinem Rechner läuft xampp unter Windows XP Pro. Ich habe ein Tool namens TestLink und das will ich dahingehend anpassen, dass der Benutzer ausgeloggt wird, sobald er den Browser schließt oder länger als x Minuten keine Aktion durchgeführt hat. Ich habe bereits in der php.ini die Garbage-Collector-Einstellungen so angepasst, dass eigentlich in 100% der Fälle (session.gc_probability = 1 und session.gc_divisor = 1) und nach 10 Sekunden nichts tun des Benutzers (session.gc_maxlifetime = 10) der Garbage Collector anspringen müsste. Ich nutze die Subdirectory.Methode nicht und trotzdem passiert auch nach 24h nichts tun gar nichts. Ich öffne TestLink und bin als der angemeldet, der ich vorher auch schon war. Was für Möglichkeiten habe ich noch? Vielen Dank, Steffi Zitieren
baba007 Geschrieben 26. Januar 2006 Geschrieben 26. Januar 2006 setcookie(session_name(),' ',time()-3600,'/'); session_destroy(); ? Zitieren
Whatever Geschrieben 26. Januar 2006 Geschrieben 26. Januar 2006 Okay, du hast also eine Webapplication, bei der du ein automaitsches Ausloggen realisieren möchtest. Das Problem das du offenbar nicht bedacht hast: HTML, und damit auch dein PHP-Script, reagiert nur. D.h. damit irgendwas passiert muss der User irgendeine Aktion tätigen, also eine Seite laden. Daher kann bei deiner jetzigen Lsödung der GC nicht arbeiten. Der ist übrigens auch garnicht dafür gedacht, der soll bloß den Speicher aufräumen. Die Sessionfiles löschen ist ohnehin doof, weil du nicht weißt wa passiert wenn PHP gerade daraus liest wenn du sie löscht. Im schlimmstenfall stürzt dir das Ding ab. Es gäbe da verschiedene möglichkeiten: - Du vergleichst bei jedem Seitenaufruf den Timestamp der letzen Atkion mit dem aktuellen, ist die differenz größer als 10 Minute wird er ausgeloggt und bekommt ne Meldung zu sehen. Andernfalls speicherst du einfach den aktuellen Timestamp in der Datenbank und zeigst die Seite an. Vorteil: Client unabhängig, simpel, ziemlich sicher da kaum zu manipulieren - Du lässt einen Javascript Timer laufen, der nach 10 Minuten ohne Aktion das ausloggen-Script aufruft Vorteil: man könnte den User vorwarnen, ebenfalls einfach zu implementieren Nachteil: wenn JS ausgeschaltet ist funktioniert das nichtmehr Zitieren
Dizzy Geschrieben 26. Januar 2006 Autor Geschrieben 26. Januar 2006 Vielen Dank für die schnelle Antwort. Ich bin in der Webentwicklung blutige Anfängerin und war schon froh, dass ich überhaupt irgendetwas zu meinem Problem gefunden habe. Mit deinen Ausführungen kann ich jetzt wenigstens wirklich was anfangen. MfG, Steffi Zitieren
Whatever Geschrieben 26. Januar 2006 Geschrieben 26. Januar 2006 Hättest du das mit der blutigen Aafängerin gleich gesagt, wäre ich mehr ins Detail gegangen Aber wenn du so weiterkommst ist ja gut...sonst frag ruhig nochmal nach. Zitieren
Dizzy Geschrieben 26. Januar 2006 Autor Geschrieben 26. Januar 2006 Hallo, ich habe gerade festgestellt, dass das System mit Cookies arbeitet. Funktioniert die von Whatever beschriebene Methode mit den timestamps dann trotzdem? Die Cookies kann ich wahrscheinlich schwerlich vom Server aus beim Client löschen, oder?! Vielen Dank, Steffi Zitieren
Whatever Geschrieben 26. Januar 2006 Geschrieben 26. Januar 2006 Okay ich gehe bei meiner Beschreibung von ein paar Voraussetzungen aus: a) es läuft da eine Datenbank (vermutlich MySQL) die User verfügen über eine eindeutige Kennzeichnung (bestenfalls eine ID, eine eindeutiger Username reicht auch) Du baust dir eine Funktion die nennst du z.B. checkTimeout($userid). Diese Funktion bekommt den Benutzernamen/ID/o.ä. übergeben. Diese Funktion tut dann intern folgendes: Datenbankverbindung aufbauendie entsprechende Tabelle öffnennachschauen ob zu dem entsprechenden User ein Eintrag exisitert:wenn ja -> überprüfen ob der gespeicherte Timestamp älter als 10 Minutenwenn ja -> lösch diesen Eintrag und schick den Benutzer auf die Einloggen seite (Zusätzlich: Cokkies entfernen, etc.) (vorher DB schließen)wenn nein -> Temistamp für diesen Nutzer auf den aktuelle Timestamp setzen [*]wenn nein -> schick den Benutzer auf die Einloggen seite (vorher DB schließen) Diese Funktion bindest du dann einfach auf jeder Seite ein (möglicherweise exisitert ja schon eine Funktion die auf jeder Seite aufgerufen wird, da kannst sie natürlich einfach einfügen und gut ist) Zusätzlich muss du das einloggen so ändern, das beim einloggen ein Timestamp in der Tabelle angelegt wird. Das wars im Prinzip. /€: Natürlich muss man keine Datenbank benutzen, man könnte das auch in einer Textdatei speichern. Wäre aber hässlich, langsam und fehleranfällig. Zitieren
baba007 Geschrieben 26. Januar 2006 Geschrieben 26. Januar 2006 ich fühle mich etwas überlesen würden die beiden Funktionen die ich angeführt habe dein problem nicht lösen ? Zitieren
Dizzy Geschrieben 26. Januar 2006 Autor Geschrieben 26. Januar 2006 Hallo baba007, ich habe dich nicht überlesen und möglicherweise hilft mir dein Vorschlag. Aber wie ich (zugegebenermaßen später) geschrieben habe, bin ich eine Anfängerin und kann daher mit zwei hingeworfenen Funktionen nicht viel anfangen. Wenn ich mich recht erinnere, finde ich diese Funktionen in der php.ini oder muss sie dort eintragen, stimmt´s? Danke, Steffi Zitieren
baba007 Geschrieben 26. Januar 2006 Geschrieben 26. Januar 2006 ok, ich hole aus : 1) du möchtest auf deiner Seite mit sessions arbeiten, dh nach einer bestimmten zeit oder nach schliessen des fensters, soll jeder user ausgeloggt werden 2) du machst ein session_start() am anfang deiner php seite usw ... 3) user ist drauf und macht und tut und bla 4) bei jedem klick des users, egal wohin wird die sessionzeit erneuert 5) jetzt sind 10 minuten seit dem letzten klick vergangen oder user hat fenster geschlossen 6) und nun soll er ausgeloggt werden, dh bei nochmaligem start des browsers und besuch deiner seite muss er/sie sich wieder einloggen stimmt das soweit ? Zitieren
baba007 Geschrieben 26. Januar 2006 Geschrieben 26. Januar 2006 ok dann weiter Session Tutorial in diesem Tutorial das Beenden einer Session ist alles wunderbar erklärt, auch mit tipps und tricks Zitieren
Dizzy Geschrieben 26. Januar 2006 Autor Geschrieben 26. Januar 2006 Danke schön, ich werd sehen, ob das was für meinen Verstand ist. ;-) MfG Zitieren
geloescht_JesterDay Geschrieben 27. Januar 2006 Geschrieben 27. Januar 2006 Ich habe bereits in der php.ini die Garbage-Collector-Einstellungen so angepasst, dass eigentlich in 100% der Fälle (session.gc_probability = 1 und session.gc_divisor = 1) und nach 10 Sekunden nichts tun des Benutzers (session.gc_maxlifetime = 10) der Garbage Collector anspringen müsste. Der GC springt überhaupt nicht einfach so an Der GC springt dann an (je nach Wahrscheinlichkeit), wenn der Befehlt start_session() aufgerufen wird. Und dann werden die Session-Daten auf dem Server gelöscht, die ein bestimmtes Alter (maxLifeTime) haben. dass der Benutzer ausgeloggt wird, sobald er den Browser schließt oder länger als x Minuten keine Aktion durchgeführt hat. Automatisch ausgeloggt wird er normalerweise bei Schliessen des Browsers, da der Session-Cookie eine LifeTime von 0 hat, sprich unendlich, aber nur solange der Browser nicht geschlossen wird. Die MaxLifeTime legt fest, dass eine Session nach einer bestimmten Zeit ohne Aufruf beendet werden kann. Also im GC kann sie nach der Zeit gelöscht werden. Nur mal so als Hinweis, Beispiele wurden ja schon gepostet Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.