Заключительная сессия Zend истекает преждевременно

Я использую Zend Framework для PHP и обрабатываю сессии с помощью модуля Zend_Session. Это то, что у меня есть в моем Инициализаторе (или начальной загрузке):

Zend_Session::start();
Zend_Session::rememberMe(864000);

864000 секунд должно быть хорошим в течение 10 дней, но меня все равно выгнали примерно через час (или, может быть, немного меньше). Я проверял, работает ли это выражение вообще, установив его на 10 секунд, и действительно меня вышвырнут в соответствующее время, но когда я установил его очень высокую ценность, он не работает! Я просмотрел часть документации: http://framework.zend.com/manual/en/zend.session.html

Другой метод, который я видел, заключался в следующем:

$authSession = new Zend_Session_Namespace('Zend_Auth'); 
$authSession->setExpirationSeconds(3600); 

Теперь у меня разные пространства имен. Означает ли это, что я должен установить это для всех, если я хочу, чтобы они не истекали? Я не тестировал этот метод установки истечения срока действия, но я действительно хотел посмотреть, что должны были сказать гуру о том, какой правильный подход подходит к этой проблеме. Большое спасибо ребятам...

Кроме того, кто-нибудь знает, как я могу это сделать, чтобы сеанс никогда не истекал? Я попытался установить второй на 0 и -1, но это вызывает ошибку.

Ответы

Ответ 1

Часы компьютера, дата и часовой пояс вашего клиента должны быть правильно настроены для работы сеанса. В противном случае конверсия времени отключена и, вероятно, приведет к тому, что ваш файл cookie истечет в тот момент, когда он попадет в их браузер.

Ответ 2

У меня была та же проблема и она была решена, поставив:

resources.session.save_path = APPLICATION_PATH "/../data/session/"
resources.session.gc_maxlifetime = 864000
resources.session.remember_me_seconds = 864000

в application.ini (как предложено tawfekov) и

protected function _initSessions() {
    $this->bootstrap('session');
}

в Bootstrap.php (это я сначала забыл). Вы должны предоставить директории сеанса правильные права доступа (chmod 777). Я описал проблему здесь. Надеюсь, это поможет следующему человеку с той же проблемой.

Ответ 3

Попробуйте вызвать память перед началом сеанса:

Zend_Session::rememberMe(864000);
Zend_Session::start();

В противном случае я полагаю, что он будет использовать значение по умолчанию remember_me_seconds. См. 49.4.4. rememberMe (целое число в секундах)

Кроме того, кто-нибудь знает, как я могу это так, что сеанс никогда не истекает? Я попытался установить второй на 0 и -1, но это вызывает ошибку.

Я не думаю, что это возможно. Сеанс контролируется тем, существует ли файл cookie на компьютере пользователя. Эти файлы cookie могут быть удалены даже пользователями, если они очистят свой кеш. Я думаю, что лучшее, что вы можете сделать, это установить его на очень большое количество. Скажите 12 месяцев.

Ответ 4

Я предполагаю, что вы используете ZF 1.8 или выше, поэтому вы можете поместить файл config.ini

resources.session.save_path = APPLICATION_PATH "/../data/session" resources.session.remember_me_seconds = 864000

и эти настройки будут автоматически загружены снова только в ZF 1.8 или выше, если вы не должны были загрузить эту конфигурацию вручную я надеюсь, что это поможет вам:)

Ответ 5

Существуют ли другие приложения PHP на сервере?

Предполагая, что вы используете стандартный обработчик сеанса на основе файлов, PHP будет хранить все сеансы в одном месте (обычно/tmp).

Если у вас есть еще один script на сервере, используя настройки session_gc_maxlifetime по умолчанию, он может есть ваши файлы сеанса.

Самое простое исправить, чтобы попытаться настроить PHP для хранения файлов сеансов для этого приложения где-то особенным - таким образом, другие приложения, запущенные на сервере, никогда не будут "очищать" данные сеанса от этого приложения.

Попробуйте создать каталог, например /tmp/myAppPhpSessions (или что-то еще), и добавьте:

ini_set('session.save_path','/tmp/myAppPhpSessions');
ini_set('session.gc_maxlifetime', 864000);

в самой верхней части вашего файла начальной загрузки.

Убедитесь, что session.auto_start отключен в php.ini