Symfony2,PDOSessionStorage在数据库中,仅在登录时创建会话

时间:2014-05-21 15:14:02

标签: php session symfony pdo

对于我的Symfony2项目,我在数据库中使用会话存储。

所以,我配置我的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行会话......

我该怎么做?成员登录时我只需要一行。

1 个答案:

答案 0 :(得分:2)

每次用户访问您的应用时,您都会获得一个新行,而不会使用任何Cookie。默认情况下,cookie是会话cookie,这意味着当您关闭它时它会被浏览器销毁。

但是数据库中的行不会被删除,因为您的服务器无意知道这一点。

所以这里有垃圾收集器......对于每个请求,服务器将清理旧会话(早于session.max_lifetime)的可能性很小。但是在类似Debian的系统上,概率设置为零,因为有一个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