Php Can';t使用PDOSessionHandler Silex设置会话生存期

Php Can';t使用PDOSessionHandler Silex设置会话生存期,php,symfony,session,session-cookies,silex,Php,Symfony,Session,Session Cookies,Silex,我正在使用Silex构建一个小型后台项目,并使用PdoSessionHandler将会话存储在数据库中。我已经成功地将会话存储在数据库中,但似乎将cookie\u life参数设置为$app变量会更改cookie的过期时间,但不会更改数据库中的会话生存时间 $app->register(new Silex\Provider\SessionServiceProvider(), [ 'session.storage.options' => [ 'name' =&g

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

$app->register(new Silex\Provider\SessionServiceProvider(), [
    'session.storage.options' => [
        'name' => '_PROJECTBACKOFFICE',
        'cookie_lifetime' => 15552000,
    ],
]);
查看
PdoSessionHandler
的代码后,数据库中会话生存期的值似乎是从php.ini设置
session.gc_maxlifest
中获取的值:

$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设置。是否有人通过编程成功地更改了数据库中的生存期?

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

php_value session.gc_maxlifetime "3600"

我已经用php的函数
ini_set
完成了这项工作,但我正在寻找一些不意味着更改php.ini配置的东西。您不需要更改
php.ini
,只需创建一个
.htaccess
文件。我知道这一点,但如果我想为不同的用户提供不同的会话值。。。我想要一个编程解决方案。不,您只需要将apache会话过期时间设置为高于
SessionServiceProvider()
中的过期时间。然后,您可以在
SessionServiceProvider()
配置中执行任何您想要的操作。这不是真的,
SessionServiceProvider
ini\u get
函数而不是从参数配置中获取
sess\u life
的值。