【问题标题】:Can't set session lifetime with PDOSessionHandler Silex无法使用 PDOSessionHandler Silex 设置会话生存期
【发布时间】:2015-11-06 05:08:08
【问题描述】:

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

【问题讨论】:

    标签: php symfony session session-cookies silex


    【解决方案1】:

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

    php_value session.gc_maxlifetime "3600"
    

    【讨论】:

    • 我已经用 php 的函数 ini_set 做到了这一点,但我正在寻找一些并不意味着改变 php.ini 配置的东西。
    • 您不需要更改您的php.ini,只需创建一个.htaccess 文件即可。
    • 我知道,但是如果我想为不同的用户设置不同的会话值...我想要一个编程解决方案。
    • 不,您只需将您的 apache 会话过期时间设置为高于SessionServiceProvider() 中的过期时间。然后你可以在SessionServiceProvider() 配置中做任何你想做的事情。
    • 这不是真的,SessionServiceProviderini_get 函数而不是从参数配置中获取sess_lifetime 的值。
    猜你喜欢
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 2011-04-25
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多