| | | | |
| | |
| Neuer Benutzer Registriert seit: 12.10.2005
Beiträge: 7
![]() | Hallo Forum, ich baue gerade eine Schreib-Workshop-Umgebung und benutze dazu das beliebte Forum My little Forum als Grundlage. Nun habe ich festgestellt, daß die Session nach einer gewissen Zeit der Inaktivität verfällt. Leider habe ich trotz Stöberns und Googelns nicht finden können, wie ich den Timeout so erhöhen kann, daß niemand zu früh rausgeschmissen wird. Man muß sich das so vorstellen: Das ist eine Schreib-Workshop. Die Leute schreiben vielleicht stundenlang an einem Text und wollen ihn dann abschicken - vielleicht unterbrechen sie zwischendrin sogar die Netzverbindung. Und wenn sie dann abschicken, kommt plötzlich die Loginseite und die Arbeit ist vernichtet - das darf nicht passieren! Alles was ich bisher gefunden habe war: ini_set("session.gc_maxlifetime", time()+(3600*24*7*52*10)); ... sollte die Laufzeit auf zehn Jahre setzen, ist das korrekt? Herzlichen Dank für Hinweise! Gruß Arnd |
| |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Neuer Benutzer Registriert seit: 12.10.2005
Beiträge: 7
![]() | Hi, erst mal danke für Eure Antworten. Nur schlauer bin ich immer noch nicht. Es kann doch nicht wahr sein daß es unmöglich ist die Dauer der Session festzulegen. Ich habe mal testweise ini_set("session.gc_maxlifetime", 10) or exit("nein."); im Login-Skript und wieder auf der ersten Seite die kommt, jeweils VOR der Session-Eröffung eingesetzt. Demnach müßte ich nach 10 Sekunden rausgeschmissen werden, wenn ich neu lade. NICHTS. Kein Effekt. Ich tappe völlig im Dunkeln, suche seit Stunden im Netz nach Hinweisen, aber alles was ich finde sind FRAGEN wie meine in Foren, auf die dann niemand was weiß. Offenbar schwarze Magie. Arnd |
| |
| | ||
| Erfahrener Benutzer Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse: Fortgeschritten ![]() | Zitat:
Andererseits hab ich mal gelesen, das der GC erst nach dem Starten der Session angeworfen wird. Das würde dann bedeuten, dass du dich niemals selbst aus einer Session kicken kannst (mit der Satndard-Implementierung). In dem Fall lass mal zwei Sessions laufen und teste so. Die PHP-Session-Funktionen sind einfach sehr grundlegend, weden von einigen Programmierern aber eben einfach nur so benutzt, ohne sich weiter drum zu kümmern. Das ist eine ziemlich unschere und wackelige Geschichte dann. Insofern würd ich erst mal schauen, ob deine Anwendng da eine gescheite Implementierung der Sitzungssteuerung hat und wenn nicht, dann man im aktuellen svn- bzw. csv-snapshot schauen (falls Open Source) und das einfach mal gescheit einbauen. Noch was prinzipiell zu Sessions (vielleicht ilfreich zum testen): Wenn die Session-Datei vom GC gelöscht wurde, der Client aber noch die alte Session-ID mitschickt, wird eine Datei mit dem gleichen Namen angelegt, wie die alte Session-Datei (was man in der Implementierung der Sitzungssteuerung normalerweise aus sicherheitsgründen rückgängig macht, Stichwort Session-Fixation). Nochwas: Wenn mehrere Anwendungen den selben Session-Save-Path verwenden, dann löscht jede Anwendung natürlich blind alle Sessions, die aus ihrer Sicht abgelaufen sind. Wenn du auf dem Server also noch eine Anwendung hast, die 10 Minuten-Session verwendet und die das selbe Verzeichnis benutzt, wie eine Anwendung mit 10 Stunden-Sessions, dann löscht die eine natürlich auch die Sessions der anderen Anwendung schon nach 10 Minuten. Sinnvoll ist also immer folgende Vorgehensweise: - eigenen Speicherpfad; - GC möglichst lange hinhalten (hängt natürich vom Plattenplatz ab, den du dafür verwenden kannst); - In der Session die Startzeit und die Zeit des letzen Zugriffs speichern und ggf. abgleichen. Ich benutze immer zwei Zeiten: Eine absolute (jetzt - Startzeit) und eine "relative" (Zeit seit dem letztem Klick), wobei sich die absolute auch auf 0 setzen lässt und dann eben nicht geprüft wird. Dann natürlich das übliche: - Beim Start der Session (erster Aufruf) und bei jedem Statuswechsel die Session-ID ändern; - Gegebenenfalls noch einen Fingerprint vom Client speichern (nicht die IP, aber die Browser-Header eben); - vor jedem Abbruch des Skrites ein session_write_close(); Wichtig ist einfach, dass die Daten der Session auch dann noch da sind, wenn der Benutzer eigentlich schon zu lange Inaktiv war (im Rahmen natürlich), um dann entsprechend darauf reagieren zu können (z.B. Passwortbestätigung). Nochmal in Kurzform: Entweder die Anwendung keinnt eine banale Konfigurations-Option zur Session-Laufzeit, oder sie verwendet intern einen fest einprogrammierten Wert (in beiden Fällen kannst du das leicht ändern und dann sollte das auch funktionieren). Wenn nicht, dann musst du dich in die Sitzungssteuerung erstmal einarbeiten um die Anwendung um deine Wünsche zu erweitern. Vielleicht ist es damit getan, den Save-Path umzulegen (muss man auf shared hosts ohnehin immer!) und die Zeit des gc hochzusetzen. Basti | |
| |
| | |
| Benutzer Registriert seit: 16.10.2004
Beiträge: 90
![]() | machs doch einfach so dass wenn der text abgeschickt wird und man zu lange inaktiv war dann wird nochmal login daten verlangen und danach abspeichern. damit sollte dein problem doch völlig gelöst sein?!
__________________ mgtt 2007 |
| |
| | |
| Erfahrener Benutzer Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse: Fortgeschritten ![]() | Das Problem dabei ist, die Eingabe auch wirklich dem Benutzer zuordnen zu können. Bei Foren-Postings kann man das sicher vernachlässigen, aber es ist sicher wichtig zu wissen, dass so prinzipiell ein Angreifer eine bestimmte Eingabe vorbereiten und einem Benutzer des Systems unterjubeln kann. Der Loggt sich nichtsahnend ein und schon wird die vorbereitete Eingabe des Angreifers mit den Rechten des Benutzers ausgeführt. Und, um die Eingabe zuordnen zu können, brauchst du eben eine Session. Basti |
| |
| | |
| Neuer Benutzer Registriert seit: 12.10.2005
Beiträge: 7
![]() | Hallo Basti, ich habe mir Deine Hinweise gespeichert, vielen Dank dafür. Leider größtenteils böhmische Dörfer, aber ich merke mir das mal. Meine Session-Behandlung beschränkt sich im Grunde auf den o.g. Zeilen. Vom Provider habe ich den Hinweis erhalten, daß ich mit einem Eintrag in einer .htaccess-Datei die Sessiondauer erhöhen kann: php_value session.gc_maxlifetime 3600 Das mit dem header-Befehl funktioniert zwar, aber offenbar nur auf Kulanzbasis; das verbessere ich noch. Herzliche Grüße Arnd |
| |
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Sessiondauer festlegen | PHP Tipps 2005 | 9 | 08.04.2005 22:10 | |
| Sessiondauer / Cookies ? | PHP Tipps 2005 | 7 | 15.02.2005 21:28 | |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| session.gc_maxlifetime erhöhen, php session dauer, php session dauer einstellen, session.gc_maxlifetime verändern, http://www.php.de/php-tipps-2006/41921-sessiondauer-erhoehen.html, php script laufzeit erhöhen, php session laufzeit erhöhen, php laufzeit erhöhen, php session timeout erhöhen, php session dauer festlegen, session.gc_maxlifetime ändern, php session zeit einstellen, session.gc_maxlifetime, php session erhöhen, php script laufzeit erhöhen htaccess, sitzungsdauer php, php session laufzeit, session zeit einstellen php, php session gültigkeit erhöhen, php sessiondauer |

Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.