2014-05-21 48 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

相关问题