2015-11-04 41 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