Странная проблема сеанса с Rails 3 reset_session и cookies.delete() в одном и том же действии контроллера

В моем действии выхода из системы я делаю это:

reset_session
cookies.delete(:rememberme)
redirect_to root_url

Но сессия не уничтожается.

Когда я проверяю заголовки, запрос, отправленный моему выходу из системы, явно включает идентификатор сеанса:

Cookie: hiddenalerts=site_vrfy_124258; __utmz=REMOVED_INFO.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); elpriv=REMOVED_INFO; SESSID=b39a9a89bb6a39ea91b620fe0da392ed; __utma=REMOVED_INFO; __utmc=REMOVED_INFO; __utmb=REMOVED_INFO

Но ответ очищает только файл cookie Rememberme, он не очищает файл cookie сеанса:

Set-Cookie: rememberme=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT

Если я сравню это с теми же заголовками, когда я закомментирую удаление файла cookie Rememberme. Запрос выглядит так же:

Cookie: hiddenalerts=site_vrfy_124258; __utmz=REMOVED_INFO.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); elpriv=REMOVED_INFO; SESSID=b39a9a89bb6a39ea91b620fe0da392ed; __utma=REMOVED_INFO; __utmc=REMOVED_INFO; __utmb=REMOVED_INFO

Но ответ больше похож на то, что я ожидал (и моя сессия правильно уничтожена):

Set-Cookie: SESSID=50640523cf32b5b0fe8c93eb16aba6dc; path=/; HttpOnly

Кто-нибудь еще испытал это? Я могу только предположить, что обработчик сеанса и ApplicationController не содержат одну и ту же ссылку на файлы cookie, поэтому, если вы измените файлы cookie в контроллере, это уничтожит все, что сделал reset_session. Я могу обойти эту проблему, вручную удалив файл cookie сеанса, но я хотел бы сначала понять, что происходит, и есть ли известный обходной путь.

Очевидно, мне нужна возможность очистить файл cookie «запомнить меня» во время процесса выхода из системы, иначе пользователь просто сразу же войдет в систему.

РЕДАКТИРОВАТЬ | Проблема поднята как ошибка. Я пока поработаю над этим. https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/6763-deleting-a-cookie-and-calling-reset_session-in-the-same-controller-action-does-not-send-new-session-cookie


person d11wtq    schedule 02.05.2011    source источник
comment
Я сталкиваюсь с похожими проблемами. Обработка куки-файлов в Rails, похоже, уже какое-то время содержит ошибки. Можете ли вы опубликовать, как вы работали над этим?   -  person Dex    schedule 24.05.2011
comment
На самом деле я отследил проблему до моего кеширующего прокси, а не самого Rails. Прокси стирал заголовки Set-Cookie: вместе. Но если вам интересно, как я работал до того, как обнаружил эту проблему, я просто изменил действие своего контроллера на if cookies[:rememberme]; cookies.delete(:rememberme); redirect_to(request.url); end, поэтому он фактически просто очистил файл cookie и сбросил сеанс за два запроса.   -  person d11wtq    schedule 24.05.2011
comment
Я также обнаружил, что в функциональных тестах безопасные файлы cookie остаются невидимыми, если вы не вызываете @request.env["HTTPS"] = "on"... что кажется глупым, но тем не менее.   -  person d11wtq    schedule 24.05.2011
comment
@ d11wtq, +1 за то, что ваше решение имеет большое значение для решения другой проблемы, с которой я столкнулся.   -  person Jay    schedule 02.08.2011


Ответы (1)


Просто чтобы убедиться, но вы назначаете этот файл cookie правильной клавише? куки[:помнить меня]? Файл cookie не будет удален, если он не найдет ваш хеш-атрибут.

person zanst    schedule 02.05.2011
comment
Это правильное удаление cookie-файла Rememberme. Проблема в том, что он не отправляет новый идентификатор сеанса в заголовке Set-Cookie:, если я не удалю файл cookie. Я работал над этим, но мне кажется, что это устаревшая ошибка данных cookie в Rails. - person d11wtq; 02.05.2011