Zend_Session потерян при использовании refreshrateId () - PullRequest
1 голос
/ 03 апреля 2009

У меня была эта проблема в нескольких приложениях ZF сейчас, и это очень расстраивает:

В верхней части моей начальной загрузки у меня есть следующие две строки

Zend_Session::start();
Zend_Session::regenerateId();

Мое приложение требует аутентификации с использованием Zend_Auth и использует хранилище сеансов по умолчанию для сохранения личности. Случайно сеанс теряется, давая эффект, что пользователь вышел из системы. Если я уберу вызов Zend_Session ::genrateId (), сессия не будет потеряна.

Восстановление идентификатора сеанса повышает безопасность, поэтому я хотел бы, чтобы это работало. Эта проблема возникает как на моем локальном сервере разработки (windows), так и на нашем промежуточном сервере (linux)

Ответы [ 3 ]

5 голосов
/ 03 апреля 2009

После прочтения вашего вопроса я искал решение вашей проблемы. На самом деле, согласно Zend Framework: Документация - это решение очень просто.

"Если пользователь успешно вошел на ваш веб-сайт, используйте RememberMe () вместоcarrateId ()."

Надеюсь, это вам поможет.

Привет

Юнес

[edit: это ссылка на то, где я нашел это: Zend Framework: Документация

4 голосов
/ 27 сентября 2010

У меня была связанная проблема с Zend_Session. Возможно, ваш сеанс потерян из-за следующей проблемы:

попробуйте использовать это:

Zend_Session::rememberMe(100); // any value here

Затем перейдите на любую из ваших страниц в приложении с набором данных сеанса (например, пользователь вошел в систему) и очень быстро нажмите кнопку обновления браузера (например, двойной щелчок) 3-5 раз. Вы увидите, что данные вашего сеанса исчезли: (

Единственный способ, которым я мог бы справиться с этим, - это пока не использовать метод RememberMe (). Я надеюсь, что кто-нибудь прояснит этот вопрос здесь. Я думаю, что метод refreshrateId () каким-то образом портит значение cookie, так что последующие вызовы из браузера на сервер не связываются с существующим идентификатором сеанса.

0 голосов
/ 30 июля 2012

У меня такая же проблема при использовании cookie сессии, когда срок действия cookie истек, все было в порядке.

При использовании функции запомнить меня дата истечения устанавливается в секундах, указанных в качестве параметра.

Мое решение состояло в том, чтобы поместить код регенерации сеанса в index.php после создания нового Zend_Application и перед вызовом $application->bootstrap()->run();, генерируя идентификатор каждые 5 запросов.

/** Zend_Application */
require_once 'Zend/Application.php';


// Create application, bootstrap, and run
$application = new Zend_Application(
                APPLICATION_ENV,
                APPLICATION_PATH . '/configs/application.ini'
);

// set httponly option (when set in application.ini it dosent work) 
Zend_Session::setOptions(array('cookie_httponly' => true));

//regenerate sessionid after 5 hits
$defaultNamespace = new Zend_Session_Namespace();
if ($defaultNamespace->initialized > 3) {
    Zend_Session::regenerateId();
    $defaultNamespace->initialized = 0;
} else {
    $defaultNamespace->initialized++;
}

//run application
$application->bootstrap()->run();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...