Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

Okay ich gehe bei meiner Beschreibung von ein paar Voraussetzungen aus:

a) es läuft da eine Datenbank (vermutlich MySQL)

B) 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 aufbauen
  • die entsprechende Tabelle öffnen
  • nachschauen ob zu dem entsprechenden User ein Eintrag exisitert:
    • wenn ja -> überprüfen ob der gespeicherte Timestamp älter als 10 Minuten
      • wenn 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.

Geschrieben

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

Geschrieben

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 ?

Geschrieben

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 :)

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...