Контент


Теряем flash-данные сессии?

В продолжение предыдущего поста. Прикручивая капчу к форме добавления/редактирования комментариев, обнаружил, что теряется сохраняемый в сессии параметр ‘redirect_from‘, который я использовал, чтобы вернуть пользователя обратно на страницу, откуда он приходил. Сразу вспомнился топик о потере сессий пользователями при редиректе.

Почти сутки проковырявшись с проектом, я обнаружил, что собственно без капчи все работает нормально. Судя по всему, когда браузер совершает запрос к серверу за изображением (что-то вроде http://localhost/captcha/default), все flash-данные сессии очищаются, в том числе и мой несчастный параметр. Первое пришедшее в голову решение — дописать в контроллер Captcha_Controller строчку Session::instance()->keep_flash(), которая продлевает жизнь flash-данным в сессии еще на один запрос.

Итог — надо быть аккуратнее с подобными фишками, аналогичные проблемы скорее всего ожидают и при Ajax-запросах. Возможно, стоит создать специальное событие, которое будет генерироваться при всех запросах, возвращающих не text/html результат…

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Опубликовано в напильник.

Теги: , , , .


Комментарии (4)

Будьте в курсе обсуждения, подпишитесь на RSS ленту комментариев к этой записи.

  1. ANT пишет:

    Кстати для такой фичи можно еще использовать get параметр в строке запроса. Например auth\login?redirect_to=admin.

  2. BIakaVeron пишет:

    Мне не очень нравится показывать внутренние переменные в GET-строке… В крайнем случае что-то типа ?page=X, но уж не значение редиректа. А иначе — зачем нам сессии? ;)

  3. Slaver пишет:

    Как вариант, можно вместо flash-данных использовать стандартные, а после использования сразу удалять.
    Session::get_once('redirect_from');

  4. BIakaVeron пишет:

    Я в данный момент заинтересовался предложенным на форуме вариантом от spirit’а, очень любопытное решение.



Можно включить подсветку кода: <code><pre lang="">...</pre></code>
Разрешены некоторые HTML теги

или используйте trackback.