2015-11-04 56 views
3

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

$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设置。有没有人成功地以编程方式改变数据库的生命周期?

回答

0

您可以在.htaccess中设置它,这是唯一的方法。它必须比一生中SessionServiceProvider()设置中设置更高:

php_value session.gc_maxlifetime "3600" 
+0

我已经做了与PHP的功能'ini_set',但我一直在寻找的东西,这并不意味着改变php.ini配置。 – Khriz

+0

您不需要更改'php.ini',只需创建一个'.htaccess'文件即可。 –

+0

我知道,但是如果我想为不同的用户使用不同的会话值...我想要一个编程解决方案。 – Khriz