PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP] Sitzungswiederherstellung im Firefox verhindern


Marbleearth
2010-02-15, 22:11:40
Hallo,
ich habe eine Seite die die Nutzer nach 60min Inaktivität automatisch ausloggt. Das klappt soweit ganz gut (bei jeder Aktion/Seitenwechsel/etc.) wird der zuletzt in der Datenbank abgelegte Timestamp mit dem aktuellen verglichen und wenn die Differenz kleiner als 60min ist wird der aktuelle Timestamp in der Datenbank abgelegt und der Nutzer kann seine Aktion durchführen.

Ansonst kommt die "Ausgeloggt"-Seite. Soweit so gut.
Mir ist nur aufgefallen, dass das Ganze nicht funktioniert, wenn man den Rechner einfach runterfährt ohne Firefox korrekt zu beenden. Durch diesen vermeintlichen "Absturz" kommt beim nächsten Aufruf von Firefox die Sitzungswiederherstellung und man kann munter klicken ohne sich neu einzuloggen.

Nun hab ich nicht wirklich eine Idee wie ich das lösen soll, aber andere Seiten schaffen es ja scheinbar irgendwie?

Habt ihr nen Tipp?

mfG,

bluestyler

PatkIllA
2010-02-15, 22:15:14
Da musst du mal bei deiner Sessionverwaltung nachschauen.
Dein 60 min check arbeitet damit ja nachweislich falsch.
Oder es ist der Cache vom Browser.

Marbleearth
2010-02-15, 22:25:32
Da musst du mal bei deiner Sessionverwaltung nachschauen.
Dein 60 min check arbeitet damit ja nachweislich falsch.
Oder es ist der Cache vom Browser.

naja das problem ist eben, dass die session erst mit klick auf logout zerstört wird. ich weiß auch nicht wie man das ändern kann?!

Sephiroth
2010-02-15, 23:14:13
Wenn Sitzungswiederherstellung innerhalb der 60 Minuten genutzt wird, dann ist alles ok, denn solange soll die Sitzung ja gültig bleiben. Erst dann wenn die Stunde um ist, soll die Session für ungültig erklärt werden. Folglich musst du anfangs zusätzlich prüfen, ob seit der letzten Aktivität der Session >60 Minuten vergangen sind und sie dann für ungültig erklären. Alternativ baust du dir einen cron job, der regelmäßig nach abgelaufenen Sessions sucht und sie ggf. zerstört.

Marbleearth
2010-02-15, 23:29:13
Wenn Sitzungswiederherstellung innerhalb der 60 Minuten genutzt wird, dann ist alles ok, denn solange soll die Sitzung ja gültig bleiben. Erst dann wenn die Stunde um ist, soll die Session für ungültig erklärt werden. Folglich musst du anfangs zusätzlich prüfen, ob seit der letzten Aktivität der Session >60 Minuten vergangen sind und sie dann für ungültig erklären. Alternativ baust du dir einen cron job, der regelmäßig nach abgelaufenen Sessions sucht und sie ggf. zerstört.


Hallo, danke für deinen Post. Es wird ja eigentlich geprüft ob die Sitzung abgelaufen ist. Also zumindest solange FF geöffnet bleibt und der Nutzer dann nach 60min+ weiter auf der Seite eine Aktion durchführen will, kommt der Timeout. Mir ist es ein Rätsel wie FF es schafft das Ganze System mit der Sitzungswiederherstellung auszuhebeln. Weil der Timestamp in der Datenbank bei jeder Aktion abgefragt wird (vor der Aktion).

Sephiroth
2010-02-15, 23:58:10
Naja, im Grunde nutzt session restore auch nur den Cache von Firefox, bloß das auch die session cookies wieder mit geladen werden (weil sie noch nicht gelöscht wurden).

Marbleearth
2010-02-16, 13:09:38
hm dacht ich mir schon so. Also Cronjob und minütliche Aktualisierung möchte ich deswegen nicht einsetzen.

Wie machen denn andere Seiten das?

AlecWhite
2010-02-23, 19:57:46
Begrenzt die Session-Lifetime serverseitig (wo nichts ist, kann nichts wiederhergestellt werden)

samm
2010-02-23, 20:08:21
Wir haben evt. speziellere Sicherheitsanforderungen als anderswo, aber wir speichern bei jedem session restore die session id mit einem timestamp ab. Wenn eine Session restored werden soll, deren letzte Aktualisierung zu lange her ist, wird sie zerstört & der User rausgeschmissen.

Marbleearth
2010-02-24, 00:26:20
Wir haben evt. speziellere Sicherheitsanforderungen als anderswo, aber wir speichern bei jedem session restore die session id mit einem timestamp ab. Wenn eine Session restored werden soll, deren letzte Aktualisierung zu lange her ist, wird sie zerstört & der User rausgeschmissen.

das klingt genau nachdem was ich suche. wie kommt man an die session id ran?

Begrenzt die Session-Lifetime serverseitig (wo nichts ist, kann nichts wiederhergestellt werden)

kannst du das bitte genauer ausführen?

AlecWhite
2010-02-24, 11:29:32
Folgende Einstellungen in der php.ini

session.gc_maxlifetime = 3600;

Sessions welche älter sind, werden automatisch entfernt

samm
2010-02-24, 21:49:23
das klingt genau nachdem was ich suche. wie kommt man an die session id ran?session_id (http://php.net/manual/de/function.session-id.php)

Marbleearth
2010-02-27, 01:20:56
Folgende Einstellungen in der php.ini

session.gc_maxlifetime = 3600;

Sessions welche älter sind, werden automatisch entfernt

das das Projekt momentan noch auf nem Free-Hoster liegt kann ich daran leider nix drehen. Aber das ist doch eh keine gute Idee, was ist wenn der User länger als 1h eingeloggt ist und zB alle 10min eine Aktion macht. Dann müsste man an jedem Interaktionspunkt die Session neu initialisieren. Das möchte ich eigentlich nicht.

Das mit der SESSION-id klingt aber gut. das werd ich mal durchdenken, wie ich das für mich nutzen kann :cool:

vielen Dank schonmal für die Antworten.

Edith:
mit session_id und timestamp in der Datenbank abgleichen funktioniert alles wie ich es haben wollte :)