#ruby-on-rails #session
#ruby-on-rails #сеанс
Вопрос:
У меня есть приложение Rails 2.3.5, которое я переношу на Rails 3.0.10, которое столкнулось с проблемой с сеансами.
Во время интеграционных тестов происходит сбой некоторого кода, поскольку у сеанса нет идентификатора (request.session — это пустой хэш, а request.session_options[:id] равен нулю). В настоящее время мы используем webrat, но то же самое происходит с capybara и со стандартными помощниками rails. Сеансы, похоже, настроены правильно, поскольку некоторые интеграционные тесты имеют идентификаторы сеансов. Похоже, что идентификатор сеанса отсутствует только в тестах, которые не входят в систему перед попыткой доступа к идентификатору сеанса (т. Е. большинству из них).
Я попытался переключить серверную часть сеанса (в настоящее время она основана на файлах cookie) на ActiveRecord, но это не помогло. Я создал новое приложение Rails 3.0.10, и оно также имеет нулевые идентификаторы сеанса. Я даже изучил обработку сеанса Rails, и похоже, что идентификатор сеанса не генерируется, если в сеансе отсутствует один.
Является ли это отсутствие идентификаторов сеанса ожидаемым поведением, которое где-то задокументировано? Если это ошибка, существует ли версия Rails, которая правильно генерирует идентификаторы сеанса?
Комментарии:
1. Я только что столкнулся с такой же ситуацией с приложением Rails 3.2.8 и Capybara 2.0.1. Есть какие-либо обновления?
Ответ №1:
Единственный способ, который я видел, как решить эту проблему, — это запустить сеансы.
sid1 = session[:session_id]
sid2 = request.session_options[:id]
Однако, если по какой-либо причине файл cookie сеанса будет удален, это все равно может произойти.
Ответ №2:
Я пробовал это и никакого результата. Я также попробовал session[:foo] = ‘bar’, так как мне понравилось, как это выглядело лучше, но результата все равно не было.
Я перезагрузился, и все равно никакой радости. Затем я зашел в настройки своего браузера и удалил свои файлы cookie. Это исправило это. Из этого опыта видно, что файл cookie может препятствовать принудительному выполнению сеансов. Я менял имена классов и менял таблицы своей базы данных. Каким-то образом я повредил свой файл cookie.