• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

session expires

Status
Für weitere Antworten geschlossen.
Werbung:
sessions werden nach einer bestimmten zeit automatisch vom server als garbage eingesammelt. die kann man auch einstellen ich weiß aber nicht wo...
 
Werbung:
Werbung:
In der php.ini oder einer .htaccess Datei kannst Du die PHP-Option "session.gc_maxlifetime" aendern. Damit wuerden dann alle Sessions eine kuerzere Lebensdauer haben. Allerdings brauchst Du dabei Zugriff auf die php.ini oder musst PHP-Optionen in der .htaccess aendern koennen, was bei den meisten Hostern wohl nicht moeglich ist.

Aus einem PHP-Skript heraus kannst Du die Lebensdauer nicht mehr beeinflussen, da ist es dann ja schon zu spaet. Aber Du kannst mit session_destroy() die Session manuell beenden, und solltest vorher evtl. vorhandene Session-Cookies loeschen. Das nebenbei sehr empfehlenswerte PHP-Handbuch weiss mehr (http://www.php.net/manual/de/function.session-destroy.php).
Da steht auch, warum man nicht nur das Cookie loeschen sollte.
 
Standardmäßig dauert eine Session 180 min(was, wie ich finde, recht lange ist)

so jetzt hab ich alles rausgesucht, sorry dass es so lange gedauert hat.
http://www.php.net/manual/de/function.session-cache-expire.php
http://www.php.net/manual/de/ref.session.php#ini.session.cache-expire

wenn du damit nichts anfangen kannst mach es so:

Du startest ja bei jedem Login eine neue Session. Jede Session hat eine Individuelle Nummer. Diese Speicherst du nun immer bei jedem klick in eine MySQL DB mit der Uhrzeit (HHMMSS) und dann stellst du in der cfg ne variable (z.b. $sessin_killl) auf die zeit ein, die eine Session max dauern darf. Wenn der User nun versucht erneut eine geschützte Seite zu betreten, dann liest du alles gestarteten Sessions aus, bei denen der letzte klick längr her ist wie die zeit der Variable und löscht die aus der DB. Wenn die Session de Users dabei war, bekommt er eine Fehlermeldung.

Ist recht simpel aber ich glaube zu aufwendig erklärt
 
Ich glaube, da muss ich widersprechen. :roll:

Mit session_cache_expire() beeinflusst man nicht die maximale Ruhezeit einer Session sondern die Gültigkeit der erzeugten Seiten für Http-Caches. Wie bei der von Dir genannten Seite beschrieben ist macht das aber mit der Standardeinstellung von session_cache_limiter (no_cache) wenig Sinn, da die Seiten damit nicht zwischengespeichert werden. Siehe auch http://www.php.net/manual/de/function.session-cache-limiter.php.

Die Lebensdauer einer Session ist standardmässig 1440 Sek und kann wie schon beschrieben nur mit "session.gc_maxlifetime" geändert werden. Ich kann mir auch nicht vorstellen, dass man diesen Wert per Funktionsaufruf ändern kann, da der Session-GC schon vor der Abarbeitung des eigenen Skriptes läuft.
Sollte ich mich irren, dann korrigiert mich bitte.

Der beschriebene Vorschlag, die Session manuell zu löschen ist ok, dann aber doch lieber gleich einen eigenen Sessionhandler schreiben. Wie das geht steht unter http://www.php.net/manual/de/function.session-set-save-handler.php. Dann hast Du volle Kontrolle über jede Session.

Wenn Dir der vorgegebene Timeout zu lange ist, dann bau doch einfach einen LogOut-Button in Deine Seiten ein. Sobald da jemand drauf klickt, kannst Du die Session zerstören.
 
Werbung:
so dann hab ich ne frage ich habe ein login system: man kommt nur rein wenn die Session gesetz wurde!so wenn ich dann auf einen Menüpunkt gehe(der auch durch isset geschützt ist)und dann auf die "Zurück"Taste im Browser klicke kommt Zugfriff verweitgert (die Session ist nicht mehr gesetzt)
wie kann das sein?
 
man kann einstelleungen der php.ini mit phpscripten ändern. Allerdings nur für dieses Script selber. Wenn du da reinschreibst, dass du session.gc_maxlifetime ändern willst, kannst du glück haben und es funzt, denn man kann nicht alles ändern und der Anbieter kann es geändert haben.
 
ist der xampp! aber ich gehe ja nicht lange auf den Menüpunkt vielleicht 5Min aber dann kann die Session doch noch nicht schon gelöscht sein oder?
 
Werbung:
kann mir das bidde ma einer erklären ich muss session_start() doch auf jeder seite machen die die Session haben soll?außerdem wie kann ich sagen wie die Session heißen soll wenn ich mehrere laufen habe ich check das mit den Sessions noch nicht!
 
Richtig, session_start() wird auf jeder Seite aufgerufen. Der Name der Session gibt an, wie der Parameter heisst, der die sog. SessionId enthält. Diese wiederum wird vom SessionHandler für jede Session erzeugt, Du musst Dich da also nicht selber drum kümmern.

Mit Hilfe des superglobalen Arrays $_SESSION kannst Du dann Variablen von einem Skript zum nächsten transportieren. Das $_SESSION-Array wird mit Aufruf der Funktion session_start() befüllt.

http://www.php.net/manual/de/function.session-start.php hilft weiter.
 
Werbung:
Status
Für weitere Antworten geschlossen.
Zurück
Oben