Php Can';t使用PDOSessionHandler Silex设置会话生存期
我正在使用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
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
的值。