2009-10-04 15 views
39

Kann mir bitte jemand sagen, wie lange meine Sitzung von den unten stehenden Daten dauern wird? - Ich bin mir nicht sicher, welcher sagt mirWie lange dauert meine Sitzung?

session.auto_start Off Off 
session.bug_compat_42 Off Off 
session.bug_compat_warn On On 
session.cache_expire 180 180 
session.cache_limiter nocache nocache 
session.cookie_domain no value no value 
session.cookie_httponly Off Off 
session.cookie_lifetime 0 0 
session.cookie_path//
session.cookie_secure Off Off 
session.entropy_file no value no value 
session.entropy_length 0 0 
session.gc_divisor 1000 1000 
session.gc_maxlifetime 1440 1440 
session.gc_probability 1 1 
session.hash_bits_per_character 5 5 
session.hash_function 0 0 
session.name PHPSESSID PHPSESSID 
session.referer_check no value no value 
session.save_handler files files 
session.save_path /var/lib/php/session /var/lib/php/session 
session.serialize_handler php php 
session.use_cookies On On 
session.use_only_cookies Off Off 
session.use_trans_sid 0 0 

Antwort

77

Im Allgemeinen kann man sagen, session.gc_maxlifetime seit der letzten Änderung Ihrer Sitzungsdaten die maximale Lebensdauer spezifiziert (nicht das letzte Mal session_start genannt wurde!). Aber das Session-Handling von PHP ist ein bisschen komplizierter.

Da die Sitzungsdaten von einem Garbage Collector entfernt werden, der nur von session_start mit einer Wahrscheinlichkeit von session.gc_probability geteilt durch session.gc_divisor aufgerufen wird. Die Standardwerte sind 1 und 100, sodass der Garbage Collector nur in 1% aller session_start-Aufrufe gestartet wird. Das heißt, auch wenn die Sitzung bereits in der Theorie abgelaufen ist (die Sitzungsdaten wurden mehr als session.gc_maxlifetime Sekunden geändert), können die Sitzungsdaten länger als das verwendet werden.

Aus diesem Grund empfehle ich Ihnen, Ihren eigenen Session-Timeout-Mechanismus zu implementieren. Weitere Informationen finden Sie unter my answer to How do I expire a PHP session after 30 minutes?.

+0

Wie interagiert session.cache_expire damit? – matteo

+5

'session.cache_expire' beeinflusst nur das HTTP-Caching der Serverantwort, hat jedoch keinen Einfluss auf den Ablauf der Sitzung. – Gumbo

+1

Oh, ich sehe, cache_expire arbeitet zusammen mit cache_limiter. Die Dokumentation von PHP ist sehr unklar. Ich konnte kein einziges Wort von dem, was hier dokumentiert ist, entschlüsseln: http://es1.php.net/manual/en/function.session-cache-expire.php, bis ich das gelesen habe: http: //es1.php .net/manual/de/function.session-cache-limiter.php Danke @Gumbo – matteo

17

Dies ist der eine. Die Sitzung dauert 1440 Sekunden (24 Minuten).

session.gc_maxlifetime 1440 1440 
5

If session.cookie_lifetime is 0, the session cookie lives until the browser is quit.

EDIT: Andere haben die session.gc_maxlifetime Einstellung erwähnt. Wenn die Sitzungsbereinigung stattfindet, löscht der Garbage Collector alle Sitzungsdaten, auf die nicht länger als session.gc_maxlifetime Sekunden zugegriffen wurde. Um die Time-to-Live für den Session-Cookie festzulegen, rufen Sie session_set_cookie_params() oder definieren Sie die session.cookie_lifetime PHP-Einstellung. Wenn diese Einstellung größer als session.gc_maxlifetime ist, sollten Sie den Wert session.gc_maxlifetime auf einen Wert erhöhen, der größer oder gleich der Lebensdauer des Cookies ist, um sicherzustellen, dass Ihre Sitzungen nicht ablaufen.

+0

Danke, wenn ich den Browser schließe und die Seite wieder öffne, sehe ich immer noch die selbe sessionId? –

+1

Wenn Ihr Browser noch läuft, dann ja. Das Sitzungscookie läuft nur ab, wenn die Browseranwendung beendet wird. –

+0

Der Cookie ja, aber die Sitzung selbst läuft nach 24 Minuten ohne Aktivität ab, auch wenn Sie den Browser geöffnet lassen. –