Когда вы звоните Zend_Session::setExpirationSeconds(10)
, с сеансом ничего не происходит после 10 секунд времени как таковых.
Этот вызов заставляет Zend_Session хранить внутреннее значение, отмечающее это пространство имен сеанса для истечения срока действия в time() + $seconds
с момента совершения вызова. Каждый раз, когда Zend_Session
запускается, он проверяет, отмечены ли какие-либо данные сеанса для истечения срока действия, и, если это так, продолжает проверять, прошло ли время истечения или счетчик прыжков. Если это так, то данные сеанса, о которых идет речь, не устанавливаются при инициализации и поэтому больше не доступны для вашего приложения.
Если вы делаете этот вызов в начале каждого запроса, он должен продолжать продлевать срок жизни сеанса на столько секунд при загрузке каждой страницы.
Имейте в виду, что если в настройках сеанса в php.ini
задано истечение сеанса через 15 минут, задание срока действия пространства имен через 60 минут не повлияет на время жизни сеанса PHP, равное 15 минутам. Вы можете внести такие изменения в директивы сеанса PHP в файле application.ini
.
Установка срока действия в пространстве имен также имеет преимущество автоматического удаления некоторых данных сеанса без необходимости уничтожения всего сеанса.
Я не знаю специфики вашего приложения, но вы можете использовать плагин, чтобы проверить, не вышел ли он из системы, и перенаправить запрос на вашу страницу входа. Вы можете проверить действительный вход в систему после создания пространства имен, но вы также хотели бы убедиться, что текущий запрос не был попыткой входа. Или вы можете просто отложить проверку правильности входа в плагин и позволить вашему ACL обрабатывать это позже на уровне контроллера.
Вы также можете захотеть взглянуть на Zend_Auth , который вы можете использовать для сохранения личности в сеансе. Идентификационные данные могут быть любыми: от простого логического значения, указывающего, вошли ли они в систему, до полноценного пользовательского объекта, реализующего Zend_Acl_Role_Interface
. Zend Auth также легко расширяется, так что вы можете одновременно активировать несколько сеансов Zend_Auth, используя разные пространства имен для каждого экземпляра, и ваш собственный класс аутентификации может устанавливать разные ограничения по времени для разных пространств имен сеанса.
Надеюсь, это поможет ответить на ваш вопрос, не стесняйтесь комментировать, если у вас есть вопросы по поводу того, что я сказал.
EDIT:
Я протестировал следующий код, и он успешно истек мой идентификатор Zend_Auth после установленного времени. Я проверил это низко с 60 секундами и после ожидания 60 секунд, чтобы загрузить страницу, у меня больше не было и идентичности, и "вышел из системы". Вы можете добавить это в свой плагин трека сессии.
<?php
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) { // user is logged in
// get an instance of Zend_Session_Namespace used by Zend_Auth
$authns = new Zend_Session_Namespace($auth->getStorage()->getNamespace());
// set an expiration on the Zend_Auth namespace where identity is held
$authns->setExpirationSeconds(60 * 30); // expire auth storage after 30 min
}