php - Symfony2 - PDO session - 我需要手动删除记录还是一切都是自动的?

标签 php symfony session pdo

我已经实现了 PDO session 存储(= session 现在保存在 mysql 数据库表中)。 这是 symfony2 引用:
http://symfony.com/doc/current/cookbook/configuration/pdo_session_storage.html

如果我访问我的 webapp 的一个页面(即使没有登录),2 条记录会添加到我的 session 表中。这是正常的吗? (一个用户2条记录)
然后,如果我登录,那 2 条记录将被更改(但没有添加任何记录)。 最后,如果我注销,那 2 条记录又变了,但什么都没有被删除。

如果现在一切都是正确的,过期 session 的记录将如何/何时从数据库表中删除?我需要执行一个 cronjob 还是 symfony 会自动执行?

那么,我是否需要做某事(= 编写一些特定代码)?

我发现了这个问题:
Symfony2, Configure pdo session storage in database
垃圾收集器是否负责删除 session 表中的记录?默认是激活的吗?

最佳答案

默认情况下它应该是自动的,但过期的 session 不会在每次请求时被删除,而是根据某种概率(默认为 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 键。它应该从数据库中销毁 session 。

logout:
    invalidate_session: true

关于php - Symfony2 - PDO session - 我需要手动删除记录还是一切都是自动的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29075308/

相关文章:

php - 从网络服务 nusoap 接收 pdf 内容的奇怪行为

javascript - 从 Twig 中的数组键中删除 ""括号

session - 单页应用,无 cookie,tomcat session 管理

iOS: session +改变IP地址;如何在客户端处理它?

Android:将用户名保留在 session 中直到注销

javascript - 无法将表单提交到 PHP 脚本

php - 如何将javascript数组传递给php

mysql - 访问 twig 中数组的单个元素

php - 拉拉维尔 : Property [name] does not exist on this collection instance

php - 使用学说选择日期时间之间的行