Чтобы файл cookie сеанса обновлял время его истечения, вы можете использовать Zend_Session :: запомнитьMe () , чтобы изменить время жизни файла cookie по умолчанию.Вызов rememberMe()
также вызовет вызов Zend_Session::regenerateId()
, который генерирует новый идентификатор сеанса, копирует старые данные сеанса в новый сеанс и отправляет новый файл cookie сеанса в браузер.
Попробуйте следующий код ипосмотрите, решит ли это вашу проблему:
App::$ReservationSession = new Zend_Session_Namespace("ReservationSession");
$oSaveHandler = Zend_Session::getSaveHandler();
$oSaveHandler->setLifetime(App::$ReservationTimeout);
// Call remember me which will send a new session cookie with 3 minute expiration
// from the current time. Old session data is copied to the new one and the old
// session is deleted
Zend_Session::rememberMe(App::$ReservationTimeout);
См. раздел руководства по Идентификаторы сеанса для получения дополнительной информации или см. также Как сбросить функцию Zend RememberMe при каждом автоматическом входе?
ОБНОВЛЕНИЕ: Учитывая ваш комментарий, я пришел к этому решению, которое вы можете использовать.
Для этого нужно просто начать сеанс, а затемпроверяет значение в сеансе, чтобы увидеть, имел ли пользователь существующий сеанс.
Если у него есть сеанс, он использует setcookie () для отправки обновленного файла cookie сеанса с использованием существующих параметров.(включая идентификатор сеанса), за исключением того, что устанавливает срок действия time() + $ReservationTimeout
.Если у них не было сеанса, то нет необходимости обновлять cookie, так как срок действия уже правильный, и он будет обновляться при следующем запросе (при условии, что они посещают до истечения срока его действия).
App::$ReservationSession = new Zend_Session_Namespace("ReservationSession");
$oSaveHandler = Zend_Session::getSaveHandler();
$oSaveHandler->setLifetime(App::$ReservationTimeout);
if (!isset(App::$ReservationSession->hasSession)) {
// user had no session before or it was expired
App::$ReservationSession->hasSession = true;
} else {
// user has a valid session, update the cookie to expire 3 mins from now
$params = session_get_cookie_params();
$expire = time() + App::$ReservationTimeout;
setcookie(session_name(),
Zend_Session::getId(),
$expire,
$params['path'],
$params['domain'],
$params['secure'],
$params['httponly']);
}
Я протестировал решение с помощью обработчика файловых сессий, и оно сработало, как и ожидалось, я думаю, что оно подойдет и для вашей ситуации.