2011-12-04 101 views
5

我正在VPS上運行帶有PHP Fastcgi的nginx服務器的網站。我試圖配置php.ini(在/ etc/php5/cgi中)使PHP會話持續時間超過3天(259200秒),但它不起作用,並且我的php會話持續時間不超過一個小時。在php.iniPHP會話過期太快

我當前的會話配置:

session.use_cookies = 1 
session.use_only_cookies = 1 
session.name = PHPSESSID 
session.auto_start = 0 
session.cookie_lifetime = 259200 
session.cookie_path =/
session.cookie_domain = 
session.cookie_httponly = 
session.serialize_handler = php 
session.gc_probability = 1 
session.gc_divisor = 1000 
session.gc_maxlifetime = 259200 
session.bug_compat_42 = Off 
session.bug_compat_warn = Off 
session.referer_check = 
session.entropy_length = 0 
session.cache_limiter = nocache 
session.cache_expire = 259200 
session.use_trans_sid = 0 
session.hash_function = 0 

什麼可能是這裏的問題?

+1

你確定這是php.ini文件被加載到PHP?你有沒有試過在'phpinfo()'中雙重檢查「Loaded Configuration File」路徑來確認? – animuson

+0

嘗試在PHP文件中使用var_dump(ini_get('session.cookie_lifetime'));'在PHP ini值中的所有適用設置中確保它們不會在其他地方被覆蓋。 – Treffynnon

+0

@animuson:是的,它正在加載。配置文件(php.ini)路徑\t/etc/php5/cgi 加載的配置文件\t /etc/php5/cgi/php.ini 掃描此目錄以查看其他.ini文件\t /etc/php5/cgi/conf.d 解析的附加.ini文件\t /etc/php5/cgi/conf.d/curl.ini,/etc/php5/cgi/conf.d/gd.ini,/etc/php5/cgi/conf.d/mysql。 ini,/etc/php5/cgi/conf.d/mysqli.ini,/etc/php5/cgi/conf.d/pdo.ini,/etc/php5/cgi/conf.d/pdo_mysql.ini – NeDark

回答

10

這聽起來有點像服務器上的Ubuntu或Debian。如果我記得正確的話,有一個cronjob(通過php5或php5-common軟件包安裝)可以更頻繁地清理會話目錄。

我建議你配置你的會話保存在其他地方(比默認值)。調整session.save_path並確認cronjob不會清空它。

cronjob是類似於/etc/cron.d/php的地方 - 可以肯定的是,運行dpkg -L php5dpkg -L php5-common。假設你在Ubuntu(或Debian)上,這應該顯示所有已安裝文件的位置。

+0

最後,我通過[與memcached存儲會話](http://www.dotdeb.org/2008/08/25/storing-your-php-sessions-using-memcached/)解決了這個問題。然而,你的解決方案看起來是有效的,所以我會接受你的答案。謝謝。 – NeDark

4

幫助調試,您可以通過執行檢查當前設置的PHP cron作業是 「看」:

/usr/lib目錄/ PHP5/maxlifetime

的maxlifetime腳本搜索所有的PHP session.gc_maxlifetime的.ini文件並使用最大值。 打印的值以分鐘爲單位。

+0

我想這是ubuntu 15.10中的腳本:/ usr/lib/php5/sessionclean – talsibony