Rails — сеанс не сохраняется

#ruby-on-rails

#ruby-on-rails

Вопрос:

У меня установлен сеанс, но, похоже, он не переносится на другие страницы. Я использую Rails 2.3.5 и Ruby 1.8.7. Кто-нибудь еще сталкивался с этой проблемой?

Комментарии:

1. Можете ли вы вставить какой-нибудь код того, что делаете…..

Ответ №1:

У меня была эта проблема в Rails 3.1, когда проверка CSRF завершилась неудачей. Это может произойти, если вы используете тег вручную, а не генерируете его с помощью одного из встроенных методов, предоставляемых Rails.

Найдите в своем файле журнала «csrf» (поиск без учета регистра). Если вы видите запись в журнале, показывающую сбой csrf, скорее всего, Rails сбрасывает ваш сеанс.

Ответ №2:

Возможно, вы теряете сеанс между запросами, что может произойти, если он изначально не установлен должным образом. Если вы проверите свои файлы cookie, вы можете увидеть, что идентификатор сеанса изменяется, переназначается из-за сбоя проверки.

Также возможно, что он назначается домену, который впоследствии отклоняется браузером. Это происходит, если приложение настроено на использование определенного домена, а затем повторно размещено под другим, даже localhost .

Комментарии:

1. Странно то, что это работает на одном компьютере, а не на другом. Итак, это говорит мне о том, что код правильный, а какая-то конфигурация на моем компьютере неправильная.

2. Вы должны удалить файлы cookie на этом затронутом компьютере, по крайней мере, для соответствующего домена. Одна из проблем, которую я обнаружил, заключается в том, что у меня есть cookie для www.example.com и example.com , когда некоторые посещаемые браузеры www.example.com будут случайным образом переключаться между двумя назначенными файлами cookie, поскольку www.example.com будут использовать файлы cookie, назначенные example.com , сеансы переключаются без какого-либо смысла или причины. Именно по таким причинам вы всегда должны перенаправлять посетителей на единственный канонический URL.

Ответ №3:

Возможно, вы не использовали мета-тег csrf в своем макете. Попробуйте удалить ‘ protect from forgery’ в application_controller.rb в папке controllers. Затем попробуйте запустить приложение еще раз, если оно работает, значит, вы не добавляли теги в свой макет.