Проблема с тайм-аутом сеанса ZF3

Я столкнулся с проблемой, связанной с тайм-аутом сеанса с использованием Zend Framework 3. Срок действия сеанса истек в течение 5-10 минут. Я использовал код по умолчанию для сеанса, который скелет Zf3 предоставляет в global.php, как показано ниже.

// Session configuration.
'session_config' => [   
  'cookie_lifetime' => 60*60*1, // Session cookie will expire in 1 hour.
  'gc_maxlifetime' => 60*60*1,  // Store session data on server maximum for 1 hour. 
],

// Session manager configuration. 
'session_manager' => 
[
   'validators' => [
      RemoteAddr::class,
      HttpUserAgent::class,
    ]
],

// Session storage configuration.
'session_storage' => [
   'type' => SessionArrayStorage::class 
],

После использования вышеуказанного кода все еще сеанс истек в течение 5-10 минут. Я хочу, чтобы время истекшего сеанса превышало 30 минут. Как настроить его в Zf3.

Пожалуйста, предоставьте решение.


person Ohm    schedule 28.06.2017    source источник


Ответы (1)


У вас есть правильные настройки для диспетчера сеансов, но этого недостаточно для использования этих параметров сеанса по умолчанию.

Я предполагаю, что вы не делаете этот менеджер сеансов своим менеджером по умолчанию. Чтобы это сделать, вам нужно создать его как можно раньше. Одно из решений - сделать это в модуле Module.php.

use Zend\Mvc\MvcEvent;
use Zend\Session\SessionManager;

class Module
{
    //...

    /**
     * This method is called once the MVC bootstrapping is complete. 
     */
    public function onBootstrap(MvcEvent $event)
    {
        $application = $event->getApplication();
        $serviceManager = $application->getServiceManager();

        // The following line instantiates the SessionManager and automatically
        // makes the SessionManager the 'default' one.
        $sessionManager = $serviceManager->get(SessionManager::class);
    }
}

Справочная информация

РЕДАКТИРОВАТЬ: Мое второе предположение заключается в том, что вы используете глобальный путь для своих сеансов (например, / var / lib / php / sessions).

В Debian есть cron, который может очищать сеансы в соответствии с вашими настройками сеанса php.ini (/etc/cron.d/php).

Этот cron использует ваш php.ini «gc_maxlifetime» и, вероятно, очищает ваши сеансы.

Чтобы узнать, где сохранены ваши сеансы, используйте session_save_path (). Проверьте этот каталог для ваших сеансов.

Чтобы преодолеть это, вы должны установить "save_path", и этот путь не должен использоваться другими приложениями или скриптами на вашем сервере (вы не хотите, чтобы другой скрипт использовал глобальные настройки gc или свои собственные, удалив ваш сеансов).

Добавлять

'save_path'           =>   '/path/to/app/data/sessions'

в вашем массиве session_config.

person Jannes Botis    schedule 13.07.2017
comment
после использования вышеуказанного кода все еще сеанс истекает в течение 5-10 минут. Пожалуйста, предоставьте решение для этого. Любая другая конфигурация для сеанса, который я пропустил? - person Ohm; 13.07.2017
comment
Можете ли вы добавить код, в котором вы используете сеанс и как вы видите его истечение? - person Jannes Botis; 13.07.2017
comment
Использование моего кода выше в global.php сеанс истекает в течение 10 минут. После добавления вашего кода в файл модуля сеанс все еще истекает в течение 10 минут. - person Ohm; 14.07.2017
comment
Что ты пытаешься сделать? Срок действия учетной записи пользователя истекает? Если да, можете ли вы добавить код, в который вы входите в систему? - person Jannes Botis; 14.07.2017
comment
Я хочу, чтобы сеанс входа в систему длился не менее 30 минут. Я использовал код из github.com/olegkrivtsov/using-zf3-book-samples/blob/master/ - person Ohm; 18.07.2017
comment
все же мой сеанс входа в систему истек через 15 минут, если в идеале - person Ohm; 18.07.2017
comment
Можете ли вы попробовать установить save_path также в своих настройках и проверить, работает ли он сейчас: 'session_config' = ›['cookie_lifetime' =› 60 * 60 * 1, 'gc_maxlifetime' = ›60 * 60 * 1, 'save_path' = ›'/ Path / to / session'] Измените / path / to / session на локальный путь, например, userdemo / data / session, который доступен для записи пользователю apache в вашей системе? - person Jannes Botis; 19.07.2017