問題:
如何根據以下PHP 配置來確定會話的持續時間
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答案:
雖然session.gc_maxlifetime 設定指定會話資料自上次變更以來的最長生命週期,但PHP 的會話處理有一些複雜性。
具體來說,每次 session_start 呼叫都不會呼叫刪除過期會話資料的垃圾收集器。相反,它的呼叫機率由 session.gc_probability (預設值:1)和 session.gc_divisor (預設值:100)決定。這意味著即使會話資料理論上已經過期,它仍然可以使用更長的時間。
為了緩解這個問題並確保可靠的會話逾時,建議實作自訂會話逾時機制。
以上是PHP 的會話垃圾收集器如何影響會話壽命?的詳細內容。更多資訊請關注PHP中文網其他相關文章!