Session Laufzeit einstellen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anbieter
besucher
browser
code
datei
dateiname
datum
einstellung
laufzeit
lebensdauer
login
problem
sekunde
server
session
speichern
tag
test
testen
verzeichnis
-
Hallo
ich möchte auf dem Webspace die tag/lebensdauer">Lebensdauer von SESSIONs einstellen
habe in der .htaccess zum Testen mal 120 Sekunden eingestellt
php_value session.gc_maxlifetime 120
der Wert scheint angenommen zu werden, demm mit
$szeit = ini_get('session.gc_maxlifetime');
bekomme ich den Wert 120
Aber wenn ich jetzt eine Session Starte (und darin Variablen zuweise = Login-Daten)
dann ist die Session ABER auch nach 120 Sekunden noch da und der Login noch aktiv ?!
was ist falsch?
was muss ich tun, damit ich die Lebensdauer einer Session bestimmen kann ?
PS: ja,ich kann den Timestamp der Ablauf-Zeit beim Login / anlegen der Session speichern,
und wenn aktueller Timestamp größer ist als der gespeicherte dann session_unset()
Aber mir geht es nicht um das Beenden so kurzer Sessions (120 Sec) sondern ich will
damit dann eher längere Laufzeiten machen, wenn möglich auch mehrere Tage lange
die 120 Sec sind nur zum Testen ob es überhaupt geht
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
1. Auf das, das auf Userseite geschieht, darfst du dich nie verlassen.
2. Wird der Browser geschlossen, ist die Session vorbei. Somit ist eine Sessionlaufzeit über mehrere Tage hinweg sinnlos. Was du dir eher ansehen solltest, sind normale Cookies.
Beitrag zuletzt geändert: 19.11.2011 21:08:57 von drafed-map -
ok, verstehe, dafür brauche ich also Cookies, damit auch nach verlassen des Browsers die Daten verfügbar bleiben
das bekomme ich hin
aber nur zum Verständniss:
Warum ist bei meinem Test die Session nach 120 Sekunden noch aktiv ?!
sollte nicht durch: php_value session.gc_maxlifetime 120 in der .htaccess
nach genau 120 Sekunden die Session vom System "gelöscht" werden ?
-
Das wird daran liegen, dass Du diese Variable lokal in Deinem Webspace setzt. Sobald Du über session_start() eine Session anlegst, wird irgendwo auf dem Server (auslesbar unter session.save_path / nicht direkt in Deinem Webspace-Ordner) eine Datei angelegt, die über die im Browser abgelegte ID genau identifiziert und dementsprechend immer wieder für jeden Besucher einzeln ausgelesen werden kann.
Jedesmal, wenn Du neue Werte in die Session schreibst, bekommt diese Datei einen neues Speicherdatum. In regelmäßigen Abständen, die in den globalen Einstellungen definiert sind, geht der garbage-collector (deshalb auch gc) durch dieses globale Session-Verzeichnis und löscht alle Dateien, die älter sind als die erlaubte Zeitspanne, und räumt somit dieses Verzeichnis regelmäßig auf. Verwaiste Sessions müllen dann den Server nicht unnötig voll.
Der globale lifetime-Wert einer Session ist im Standardfall auf 1440 Sekunden eingestellt. Wenn Du also lokal diese Zeit veränderst, insbesondere verlängerst, wird das dem garbage-collector nichts ausmachen, da er sicherlich nicht jedesmal die einzelnen User-Einstellungen abfragt.
Bei einem anderen Anbieter habe ich schon einmal gesehen, dass die erzeugten Session-Dateien automatisch in ein Verzeichnis namens sessions direkt im Webspace gespeichert wurden. Da konnte ich sehen, dass der Dateiname immer der SESSON-ID entspracht. Der Inhalt war ganz normaler Text - die Variablen und ihre Werte waren einfach hintereinander weg drin gespeichert. In so einem Fall könnte dann eine lokale Einstellung evtl. einen Einfluss drauf nehmen. Die Gefahr des Auslesens von fremden Sessionwerten (evtl. sogar Passwörter) war dort jedoch sehr groß, da man an die Variablenwerte direkt über den Webspace kam.
Hier mal ein Beispiel der Session-Datei sess_3757ad81e2629d2e9d55ac48e232bd8a bei diesem anderen Anbieter
ansicht|s:5:"admin";ip|s:14:"130.75.244.146";timeout|i:1267108233; besuchte_seiten|i:5;passwort|s:32:"56e8********************"; nutzer|s:8:"test";
Dieses Session-Verzeichnis war ungeschützt, die Dateien wurden aufgelistet. Somit konnte jeder das Passwort lesen. Es ist also wichtig, dass die Sessions nicht im eigenen Webspace sondern irgendwo auf dem Server gespeichert werden!
Und in diesem globalen Verzeichnis spielen lokale User-Einstellungen keine Rolle.
Ich hoffe, ich habe das richtig verstanden und erklärt.
-
Lima hat mehrere Server. Dann, wenn man auf deine Seite zugreift, wird das PHP-Script von dem Server, der gerade die geringste Auslastung hat, ausgeführt.
Wenn sich der User nun einloggt, wird die login.php beispielsweise durch Server A ausgeführt. Danach kommt er auf die usercp.php. Diese wird nun aber von Server B ausgeführt. Du willst nicht, dass nicht eingeloggte Besucher etwas mit der usercp.php machen dürfen. Deswegen sorgst du dafür, dass nicht eingeloggt User nur eine Fehlermeldung zu sehen bekommen.
Das Problem: Server B kennt die Session des Users, der sich gerade auf Server A eingeloggt hat, nicht.
Was macht Lima, um das Problem zu lösen? Die Sessions werden alle auf einem Server gespeichert. Von diesem Server holen sich die anderen Server also die Sessions und speichern sie dort.
Das führt nun dazu, dass du die Session-Laufzeit nicht per .htaccess-Datei beeinflussen kannst.
Ich hab keinen Einblick in die Technik von Lima. Sollte ich da etwas falsch verstanden haben, bitte ich um Korrektur. Danke. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage