用
session.gc_maxlifetime 設定的話,機率是
gc_probability/gc_divisor;不明白為什麼要這個規定;這個不明白原理
發現 session 會監視使用者是否活動,然後會自動更新 session 檔案的最後修改時間。
所以寫了一個 function 讀取 session 檔案的最後修改時間,然後跟現在時間對比,如果大於設定的到期時間,假設是 10 分鐘。就清空對應 session 的資訊。這樣可以嗎?
有沒有更好的方法?
ps:我是指不活動情況下到期時間
ps:我的問題沒有考慮到為每個session的值設獨立到期時間問題;
回複內容:
用 session.gc_maxlifetime 設定的話,機率是 gc_probability/gc_divisor;不明白為什麼要這個規定;這個不明白原理
發現 session 會監視使用者是否活動,然後會自動更新 session 檔案的最後修改時間。
所以寫了一個 function 讀取 session 檔案的最後修改時間,然後跟現在時間對比,如果大於設定的到期時間,假設是 10 分鐘。就清空對應 session 的資訊。這樣可以嗎?
有沒有更好的方法?
ps:我是指不活動情況下到期時間
ps:我的問題沒有考慮到為每個session的值設獨立到期時間問題;
推薦你看看 @Laruence 大神的文章 如何設定一個嚴格30分鐘到期的Session
再附另一篇文章: 深入理解PHP原理之Session Gc的一個小機率Notice
PHP中SESSION到期,指的是,超過多少時間不活動,則到期。如果使用者有活動,每次活動時session都會重新write一次。即你說的會自動更新最後的修改時間。比如,session設定20分鐘到期,使用者每分鐘重新整理一次,連續重新整理60次,那麼一個小時他還是線上的。因為他沒有超過20分鐘未活動。
看你的說法,你想指定讓一個人在指定的時間內到期?即無論他是否活動?到達20分鐘即退出?如果是這樣,你設定session.cookie_maxlife = 1200 即可。因為session的session_id傳遞是使用cookie傳遞的,這樣設定後,session_id在cookie中存活20分鐘後到期,再重新整理時,伺服器會重新分配一個session_id,他就掉線了。
PS. 這其實也是一個PHP網站中常見的,不願見的,使用者會莫名掉線的問題分析。
設定session handle為memcache或者redis之類,即session的儲存介質為nosql資料庫,然後在此類介質中儲存session值,設定嚴格的到期時間,這個是最精確的
跟問題沒關係。自己封裝的session,不用php內建的。莫踩。。