2

一旦用户登录,我正在尝试延长默认生命周期。对于登录,我正在使用安全服务提供商,如下所示:

    $app = $this->_app;             
    $this->_app->register(new Silex\Provider\SecurityServiceProvider(), array(
        'security.firewalls' => array(
            'default' => array(
                'pattern' => '^.*$',
                'anonymous' => true, // Needed as the login path is under the secured area
                'form' => array('login_path' => '/signup/', 'check_path' => 'login_check', 'failure_path' => 'login_failure'),
                'logout' => array('logout_path' => '/logout/'), // url to call for logging out
                'users' => $this->_app->share(function() use ($app)
                    {
                        // Specific class App\User\UserProvider is described below
                        return new UserProvider($app['db']);
                    }),
            ),
        ),
        'security.access_rules' => array(
            array('^/restricted/$', 'ROLE_USER'),
        )
    ));

我尝试过像这样设置会话生命周期(cookie):

    $this->_app->register(new Silex\Provider\SessionServiceProvider(), array(
        'session.storage.options' => array('cookie_lifetime' => (60 * 60 * 12)), // 12 hours
    ));

但还是一无所获。会话在 15 分钟左右后自行删除。

如何将登录安全防火墙寿命延长至 12 小时?

4

2 回答 2

1

我想我终于让它工作了:

在数据库中保存会话似乎可以解决问题。

SQL:

  CREATE TABLE `session` (
      `session_id` varchar(255) NOT NULL,
      `session_value` text NOT NULL,
      `session_time` int(11) NOT NULL,
      PRIMARY KEY (`session_id`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

PHP:

    /* SESSION IN DB */
    $this->_app->register(new Silex\Provider\SessionServiceProvider());
    $this->_app['session.db_options'] = array(
        'db_table' => 'session',
        'db_id_col' => 'session_id',
        'db_data_col' => 'session_value',
        'db_time_col' => 'session_time',
    );
    $this->_app['session.storage.handler'] = $this->_app->share(function ()
        {
            return new PdoSessionHandler(
                $this->_app['db']->getWrappedConnection(), $this->_app['session.db_options'], $this->_app['session.storage.options']
            );
        });
于 2013-02-06T14:46:26.893 回答
1

如果您不想在数据库中存储会话,这是一个解决方案:只需增加session.gc_maxlifetimephp.ini。

当会话存储在文件中时,它们(默认情况下)被放入/var/lib/php/sessions/目录。很明显,这个目录必须不时清除。为了实现这一点,配置了一个 cron 作业,每 30 分钟/etc/cron.d/php5触发一次脚本。/usr/lib/php5/sessionclean此脚本接受 php 配置并session.gc_maxlifetime从那里获取,然后删除比此变量中指定的文件更旧的文件。

问题是:默认情况下session.gc_maxlifetime等于 1440 秒或 24 分钟。您可以将其增加到适合您的任何值,例如 24 小时(并通过会话 cookie 生命周期限制您的会话)。

于 2016-01-28T04:28:16.683 回答