2016-02-22 78 views
0

我們在Nginx下設置了PHP5 FPM。我們使用Memcached作爲會話處理程序。由Memcached處理的PHP會話仍在磁盤上

session.save_handler=memcached 

我的期望是,沒有失敗(儘管像我們的Memcached服務器的死亡一些致命錯誤),所有會議應使它到Memcached的和明確的而不是磁盤。

但是,在檢查我們的應用程序後,我在/var/lib/php5/fpm/上找到了有關Memcached AND的會話。

一些故障排除:

  1. 我們肯定混得Memcached的設置新的會話。但是,我在磁盤上找到的某些會話未出現在Memcached上
  2. 基於文件的會話的時間戳肯定是最近的 - 當前分鐘中有文件。
  3. 這些文件的權限是安裝用戶權限 - 而不是root權限。

儘管具有所述點3的上方,有SOME文件具有根用戶和組所有權。我覺得這很奇怪。爲什麼會有由root擁有的會話?這意味着任何人試圖檢查文件(有0600權限btw)將失敗。

所以,我想我的問題等同於:

  1. 是否有在新的會話文件儘管我們使用Memcached的在磁盤上創建它是有效的任何情況?
  2. 任何想法爲什麼我們會擁有擁有root權限的會話文件?

對於背景:我研究很零星的會話過期的問題。在增加Memcached內存限制和併發連接(並最終修復大量實例)後,我們仍然遇到少量會話到期。無論如何,這只是上下文 - 可能並不重要。

+0

你有任何php-cli cronjob? –

+0

@AlexBlex - 是的,他們中的一些橫跨一些用戶。想想可能是吧?因此,打到代碼庫的PHP cron作業會創建碰到文件系統的會話? –

+0

@AlexBlex - 在你的問題背面,還運行了'php -i | grep save_handler'。輸出是'session.save_handler => files => files'。所以,如果運行cronjobs會導致會話被創建,那麼這是有道理的。思考? –

回答

1

會話文件是由cron創建的php-cli創建的。 cli config與fpm不同,並使用默認的文件會話處理程序。

編輯

重要的是,的cronjob必須被擊中一段代碼,手動啓動會話
OR
的配置指令session.auto_start爲PHP5-CLI必須設置爲true