无法使用PDOSessionHandler Silex设置会话生存期

时间:2015-11-04 14:24:30

标签: php symfony session session-cookies silex

我正在与Silex构建一个小的后台项目,我正在使用PdoSessionHandler在数据库中存储会话。我已经成功将会话存储在数据库中,但似乎将cookie_lifetime参数设置为$ app变量会更改cookie的到期时间而不会更改数据库中的会话生存期。

$app->register(new Silex\Provider\SessionServiceProvider(), [
    'session.storage.options' => [
        'name' => '_PROJECTBACKOFFICE',
        'cookie_lifetime' => 15552000,
    ],
]);

看了PdoSessionHandler的代码后,看起来数据库中会话生命周期的值取了php.ini设置session.gc_maxlifetime中的值:

$maxlifetime = (int) ini_get('session.gc_maxlifetime');

并将值存储到数据库字段

$mergeStmt = $this->pdo->prepare($mergeSql);
$mergeStmt->bindParam(':id', $sessionId, \PDO::PARAM_STR);
$mergeStmt->bindParam(':data', $data, \PDO::PARAM_LOB);
$mergeStmt->bindParam(':lifetime', $maxlifetime, \PDO::PARAM_INT);

因此,看起来增加会话生存期的唯一方法是更改​​php.ini设置。有没有人以编程方式成功改变数据库的生命周期?

1 个答案:

答案 0 :(得分:0)

您可以在.htaccess中进行设置,这是唯一的方法。它必须高于SessionServiceProvider()设置中设置的生命周期:

php_value session.gc_maxlifetime "3600"