具体思路:
1.session时间设置
'SESSION_OPTIONS' => array( 'expire' => 14400, //SESSION保存4小时 ),
2.php采用cron回收session
补充:gc是按概率回收,所以先不考虑
参考:
http://asika.windspeaker.co/post/3979-ubuntu-%E4%B8%AD-php-session-%E9%81%8E%E6%9C%9F%E6%99%82%E9%96%93%E7%84%A1%E6%B3%95%E8%87%AA%E8%A8%82%E7%9A%84%E5%95%8F%E9%A1%8C
有自己在 Ubuntu 或 Debian 系統上開發 PHP 的人應該會發現,自己寫的會員登入 Remember Me 好像都無法作用。明明 Session 與 Cookie 時間都設的非常長了,卻還是會自動過期。
這是因為 Debian 會覆蓋 PHP 本身的 session.gc_maxlifetime 造成的。如果我們今天採用原生的 Session 處理機制,預設會把 session 資料存在 /var/lib/php5 裡面。
但在 Debian 中,PHP 的 session.gc_probability 被設成 0,意味著 Session 垃圾回收永遠不會進行,取而代之的是 Debian 自行設定的 Cronjob 來清除過期 Sessions,它的位置在: /etc/cron.d/php5
# /etc/cron.d/php5: crontab fragment for php5 # This purges session files older than X, where X is defined in seconds # as the largest value of session.gc_maxlifetime from all your php.ini # files, or 24 minutes if not defined. See /usr/lib/php5/maxlifetime # Look for and purge old sessions every 30 minutes 09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] && [ -x /usr/lib/php5/sessionclean ] && [ -d /var/lib/php5 ] && /usr/lib/php5/sessionclean /var/lib/php5 $(/usr/lib/php5/maxlifetime)
由此可知,Debian 會每 30 分鐘清除一次 session(原生 php 的session過期時間是24分鐘),所以我們怎麼設定過期時間都是無效的。
Session Timeouts:
http://www.fossology.org/projects/fossology/wiki/Admin-timeouts
# Look for and purge old sessions every 30 minutes 09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -n 200 -r -0 rm
PHP session回收机制及php.ini session生命期gc_maxlifetime配置/gc_maxlifetime无效:
http://www.cnblogs.com/acpp/archive/2011/06/10/2077592.html
彻底理解PHP的SESSION机制:
http://lhdst-163-com.iteye.com/blog/1743662