我已经实现了PDO会话存储(=会话现在保存在mysql数据库表中)。
这是symfony2参考:
http://symfony.com/doc/current/cookbook/configuration/pdo_session_storage.html
如果我访问我的webapp页面(即使没有登录),我的会话表中会添加2条记录。这是正常的吗? (2个用户记录)
然后,如果我登录,则更改这两个记录(但不添加记录)。
最后,如果我退出,则2条记录会再次更改,但不会删除任何内容。
如果现在所有单元都正确,那么将从db表中删除过期会话的记录的时间/时间?我需要实现一个cronjob还是symfony会自动执行此操作?
那么,我是否需要做某事(=写一些特定的代码)?
我发现了这个问题:
Symfony2, Configure pdo session storage in database
垃圾收集器是否负责删除会话表中的记录?它默认是活动的吗?
答案 0 :(得分:4)
默认情况下应该是自动的,但是每次请求都不会删除过期的会话,而是根据某种可能性删除(默认值为1%)。
<强> \的Symfony \元器件\ HttpFoundation \会话\存储\处理程序\ 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