Идентификатор сессии Rails равен нулю - PullRequest
3 голосов
/ 13 октября 2011

У меня есть приложение Rails 2.3.5, которое я перевожу на Rails 3.0.10, в котором возникла проблема с сессиями.

Некоторый код завершается ошибкой во время интеграционных тестов, поскольку у сессии нет идентификатора(request.session - пустой хеш, а request.session_options [: id] - ноль).В настоящее время мы используем webrat, но то же самое происходит с капибарой и стандартными помощниками рельсов.Сессии, похоже, настроены правильно, поскольку некоторые интеграционные тесты имеют идентификаторы сессий.Похоже, что идентификатор сеанса отсутствует только в тестах, которые не регистрируются перед попыткой доступа к идентификатору сеанса (т. Е. Большинству из них).

Я попытался переключить бэкэнд сеанса (в настоящее время он основан на файлах cookie).) к ActiveRecord, но это не помогло.Я создал новое приложение Rails 3.0.10, и оно также имеет нулевые идентификаторы сессии.Я даже копался в обработке сеансов Rails, и похоже, что при отсутствии сеанса сгенерированный идентификатор сессии не генерируется.

Является ли это отсутствие ожидаемого поведения идентификаторов сеансов документированным где-нибудь?Если это ошибка, существует ли версия Rails, которая правильно генерирует идентификаторы сессии?

Ответы [ 2 ]

3 голосов
/ 12 марта 2013

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

sid1 = session[:session_id]      
sid2 = request.session_options[:id]

Однако, если по какой-то причине cookie сеанса удаляются, это все равно может произойти.

0 голосов
/ 29 декабря 2017

Я попробовал это, но безрезультатно. Я также попробовал сессию [: foo] = 'bar', так как мне понравилось, как она выглядела лучше, но все равно безрезультатно.

Я перезагрузился и до сих пор не радуюсь. Затем я зашел в настройки браузера и удалил свои куки. Это исправило это. Судя по этому опыту, cookie-файлы могут предотвратить принудительную сессию. Я менял имена классов и таблицы базы данных. Каким-то образом я испортил свое печенье.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...