我已经实现了 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/