В моем действии выхода из системы я делаю это:
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
Set-Cookie:
вместе. Но если вам интересно, как я работал до того, как обнаружил эту проблему, я просто изменил действие своего контроллера наif cookies[:rememberme]; cookies.delete(:rememberme); redirect_to(request.url); end
, поэтому он фактически просто очистил файл cookie и сбросил сеанс за два запроса. - person d11wtq   schedule 24.05.2011@request.env["HTTPS"] = "on"
... что кажется глупым, но тем не менее. - person d11wtq   schedule 24.05.2011