2014-05-21 46 views
1

對於我的Symfony2項目,我在數據庫中使用會話存儲。Symfony2,數據庫中的PDOSessionStorage,僅在登錄時創建會話

所以,配置我config.yml這樣的:

framework: 
    session: 
     handler_id:  session.handler.pdo 

parameters: 
    pdo.db_options: 
     db_table: session 
     db_id_col: session_id 
     db_data_col: session_value 
     db_time_col: session_time 

services: 
    pdo: 
     class: PDO 
     arguments: 
      - "pgsql:host=%database_host%;dbname=%database_name%" 
      - "%database_user%" 
      - "%database_password%" 
     calls: 
      - [setAttribute, [3, 2]] 

    session.handler.pdo: 
     class:  Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler 
     arguments: ["@pdo", "%pdo.db_options%"] 

當我的帳戶登錄,在我的會話表,正常創建一個新的LIGNE。但是當我沒有任何東西顯示我的網站的頁面(例如索引)時,也會創建一個新行。

所以,用4-5個成員,我已經有+ 80行表的會話...

我怎樣才能做到這一點?當成員登錄時,我只需要一條線。

回答

2

每當用戶在沒有任何cookie的情況下訪問您的應用程序時,您都會獲得一個新行。默認情況下,Cookie是一個會話cookie,這意味着當您關閉它時,它會被瀏覽器破壞。

但是,您的數據庫中的行不會被刪除,因爲您的服務器沒有意思知道這一點。

所以這裏是垃圾收集器......對於每個請求,服務器將清理舊會話(比session.max_lifetime更早)的可能性很小。但在Debian-like系統,概率設置爲零,因爲有一個cron任務照顧它(見https://github.com/symfony/symfony/issues/10349

所以,你可能需要將session.gc_probability合明確設置爲一個:

http://symfony.com/doc/current/components/http_foundation/session_configuration.html#configuring-garbage-collection

+0

恩,我需要在我的php.ini中添加session.gc_probability = 1? –

+0

你可以這樣做,或者在應用程序級別配置它,在'framework'' session'下的config.yml中使用'gc_probability:1' ' – zefr0g

相關問題