Igo*_*gna 5 php session pdo symfony
我已经实现了 PDO 会话存储(= 会话现在保存在 mysql 数据库表中)。这是 symfony2 参考:
http://symfony.com/doc/current/cookbook/configuration/pdo_session_storage.html
如果我访问我的网络应用程序的页面(即使没有登录),我的会话表中将添加 2 条记录。这是正常的吗?(一个用户有 2 条记录)
然后,如果我登录,这 2 条记录就会更改(但不会添加任何记录)。最后,如果我注销,两条记录再次更改,但没有删除任何内容。
如果现在一切都正确,那么过期会话的记录将如何/何时从数据库表中删除?我需要实现 cronjob 还是 symfony 会自动执行此操作?
那么,我是否需要做一些事情(=编写一些特定的代码)?
我发现了这个问题:
Symfony2,在数据库中配置 pdo 会话存储
垃圾收集器是否负责删除会话表中的记录?默认情况下是否处于活动状态?    
默认情况下它应该是自动的,但过期会话不会在每次请求时删除,而是根据某种概率(默认为 1% 的机会)删除。
\Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler
public function gc($maxlifetime)
{
    // delete the session records that have expired
    $sql = "DELETE FROM $this->table WHERE $this->timeCol < :time";
    try {
        $stmt = $this->pdo->prepare($sql);
        $stmt->bindValue(':time', time() - $maxlifetime, \PDO::PARAM_INT);
        $stmt->execute();
    } catch (\PDOException $e) {
        throw new \RuntimeException(sprintf('PDOException was thrown when trying to delete expired sessions: %s', $e->getMessage()), 0, $e);
    }
    return true;
}
http://php.net/manual/en/sessionhandlerinterface.gc.php
您还可以为注销提供程序设置 invalidate_session 键。它应该销毁数据库中的会话。
logout:
    invalidate_session: true
| 归档时间: | 
 | 
| 查看次数: | 2068 次 | 
| 最近记录: |